diff --git a/packages/generator/spec.json b/packages/generator/spec.json index 266df2085..1d6dc50c7 100644 --- a/packages/generator/spec.json +++ b/packages/generator/spec.json @@ -144,7 +144,7 @@ }, "/v2/audit/logs": { "get": { - "description": "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", + "description": "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", "operationId": "enterprise-get-audit-logs", "parameters": [ { @@ -231,7 +231,7 @@ }, "/v2/orgs/{org_id}/data-classification-settings": { "get": { - "description": "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.

", + "description": "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.

", "operationId": "enterprise-dataclassification-organization-settings-get", "parameters": [ { @@ -278,7 +278,7 @@ }, "/v2/orgs/{org_id}/teams/{team_id}/data-classification": { "patch": { - "description": "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.

", + "description": "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.

", "operationId": "enterprise-dataclassification-team-boards-bulk", "parameters": [ { @@ -345,7 +345,7 @@ }, "/v2/orgs/{org_id}/teams/{team_id}/data-classification-settings": { "get": { - "description": "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.

", + "description": "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.

", "operationId": "enterprise-dataclassification-team-settings-get", "parameters": [ { @@ -400,7 +400,7 @@ "tags": ["Board classification: Team level"] }, "patch": { - "description": "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.

", + "description": "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.

", "operationId": "enterprise-dataclassification-team-settings-set", "x-settings": { "skip-tests": true @@ -470,7 +470,7 @@ }, "/v2/orgs/{org_id}/teams/{team_id}/boards/{board_id}/data-classification": { "get": { - "description": "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.

", + "description": "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.

", "operationId": "enterprise-dataclassification-board-get", "x-settings": { "skip-tests": true @@ -538,7 +538,7 @@ "tags": ["Board classification: Board level"] }, "post": { - "description": "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.

", + "description": "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.

", "operationId": "enterprise-dataclassification-board-set", "x-settings": { "skip-tests": true @@ -624,7 +624,7 @@ }, "summary": "Get all cases", "operationId": "get-all-cases", - "description": "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.", + "description": "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.", "parameters": [ { "$ref": "#/components/parameters/queryPageLimit" @@ -672,44 +672,41 @@ } }, "tags": ["Legal holds"] - } - }, - "/v2/orgs/{org_id}/cases/{case_id}": { - "get": { + }, + "post": { "x-settings": { "publish": true, "skip-tests": true }, - "summary": "Get case", - "operationId": "get-case", - "description": "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.", + "summary": "Create case", + "operationId": "create-case", + "description": "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.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CaseRequest" + } + } + }, + "required": true + }, "parameters": [ { "in": "path", "name": "org_id", - "description": "The ID of the organization for which you want to retrieve the case information.", + "description": "The ID of the organization in which you want to create a new case.", "schema": { "type": "string", "pattern": "^[0-9]+$" }, "example": "3074457345618265000", "required": true - }, - { - "in": "path", - "name": "case_id", - "description": "The ID of the case you want to retrieve.", - "schema": { - "type": "string", - "pattern": "^[0-9]+$" - }, - "example": "3074457345619012007", - "required": true } ], "responses": { "200": { - "description": "Case object", + "description": "Case created successfully.", "content": { "application/json": { "schema": { @@ -737,26 +734,74 @@ "tags": ["Legal holds"] } }, - "/v2/orgs/{org_id}/cases/{case_id}/legal-holds": { - "get": { + "/v2/orgs/{org_id}/cases/{case_id}": { + "delete": { "x-settings": { "publish": true, "skip-tests": true }, - "summary": "Get all legal holds within a case", - "operationId": "get-all-legal-holds", - "description": "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.", + "summary": "Close case", + "operationId": "delete-case", + "description": "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.", "parameters": [ { - "$ref": "#/components/parameters/queryPageLimit" + "in": "path", + "name": "org_id", + "description": "The ID of the organization in which you want to close a case.", + "schema": { + "type": "string", + "pattern": "^[0-9]+$" + }, + "example": "3074457345618265000", + "required": true }, { - "$ref": "#/components/parameters/queryPageCursor" + "in": "path", + "name": "case_id", + "description": "The ID of the case you want to close.", + "schema": { + "type": "string", + "pattern": "^[0-9]+$" + }, + "example": "3074457345618265000", + "required": true + } + ], + "responses": { + "204": { + "description": "Case closed successfully." + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "tags": ["Legal holds"] + }, + "get": { + "x-settings": { + "publish": true, + "skip-tests": true + }, + "summary": "Get case", + "operationId": "get-case", + "description": "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.", + "parameters": [ { "in": "path", "name": "org_id", - "description": "The ID of the organization for which you want to retrieve the list of legal holds within a case.", + "description": "The ID of the organization for which you want to retrieve the case information.", "schema": { "type": "string", "pattern": "^[0-9]+$" @@ -767,7 +812,7 @@ { "in": "path", "name": "case_id", - "description": "The ID of the case for which you want to retrieve the list of legal holds.", + "description": "The ID of the case you want to retrieve.", "schema": { "type": "string", "pattern": "^[0-9]+$" @@ -778,11 +823,11 @@ ], "responses": { "200": { - "description": "Legal hold objects", + "description": "Case object", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PaginatedLegalHoldResponse" + "$ref": "#/components/schemas/CaseResponse" } } } @@ -804,22 +849,30 @@ } }, "tags": ["Legal holds"] - } - }, - "/v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}": { - "get": { + }, + "put": { "x-settings": { "publish": true, "skip-tests": true }, - "summary": "Get legal hold information", - "operationId": "get-legal-hold", - "description": "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.", + "summary": "Edit case", + "operationId": "edit-case", + "description": "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.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CaseRequest" + } + } + }, + "required": true + }, "parameters": [ { "in": "path", "name": "org_id", - "description": "The ID of the organization for which you want to retrieve the legal hold information.", + "description": "The ID of the organization for which you want to edit the case information.", "schema": { "type": "string", "pattern": "^[0-9]+$" @@ -830,33 +883,22 @@ { "in": "path", "name": "case_id", - "description": "The ID of the case for which you want to retrieve the legal hold information.", + "description": "The ID of the case you want to edit.", "schema": { "type": "string", "pattern": "^[0-9]+$" }, "example": "3074457345619012007", "required": true - }, - { - "in": "path", - "name": "legal_hold_id", - "description": "The ID of the legal hold you want to retrieve.", - "schema": { - "type": "string", - "pattern": "^[0-9]+$" - }, - "example": "3074457345619013003", - "required": true } ], "responses": { "200": { - "description": "Legal hold object", + "description": "Case object", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LegalHoldResponse" + "$ref": "#/components/schemas/CaseResponse" } } } @@ -880,20 +922,26 @@ "tags": ["Legal holds"] } }, - "/v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}/content-items": { + "/v2/orgs/{org_id}/cases/{case_id}/legal-holds": { "get": { "x-settings": { "publish": true, "skip-tests": true }, - "summary": "Get content items under legal hold", - "operationId": "get-legal-hold-content-items", - "description": "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.", + "summary": "Get all legal holds within a case", + "operationId": "get-all-legal-holds", + "description": "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.", "parameters": [ + { + "$ref": "#/components/parameters/queryPageLimit" + }, + { + "$ref": "#/components/parameters/queryPageCursor" + }, { "in": "path", "name": "org_id", - "description": "The ID of the organization for which you want to retrieve the list of content items under hold.", + "description": "The ID of the organization for which you want to retrieve the list of legal holds within a case.", "schema": { "type": "string", "pattern": "^[0-9]+$" @@ -904,39 +952,22 @@ { "in": "path", "name": "case_id", - "description": "The ID of the case for which you want to retrieve the list of content items under hold.", + "description": "The ID of the case for which you want to retrieve the list of legal holds.", "schema": { "type": "string", "pattern": "^[0-9]+$" }, "example": "3074457345619012007", "required": true - }, - { - "in": "path", - "name": "legal_hold_id", - "description": "The ID of the legal hold for which you want to retrieve the list of content items under hold.", - "schema": { - "type": "string", - "pattern": "^[0-9]+$" - }, - "example": "3074457345619013003", - "required": true - }, - { - "$ref": "#/components/parameters/queryPageLimit" - }, - { - "$ref": "#/components/parameters/queryPageCursor" } ], "responses": { "200": { - "description": "Content item objects", + "description": "Legal hold objects", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PaginatedLegalHoldContentItemsResponse" + "$ref": "#/components/schemas/PaginatedLegalHoldResponse" } } } @@ -958,58 +989,59 @@ } }, "tags": ["Legal holds"] - } - }, - "/v2/orgs/{org_id}/boards/export/jobs": { + }, "post": { "x-settings": { + "publish": true, "skip-tests": true }, - "description": "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.

", - "operationId": "enterprise-create-board-export", + "summary": "Create legal hold", + "operationId": "create-legal-hold", + "description": "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.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LegalHoldRequest" + } + } + }, + "required": true + }, "parameters": [ { - "description": "Unique identifier of the organization.", - "example": "3074457345821141000", "in": "path", "name": "org_id", - "required": true, + "description": "The ID of the organization in which you want to create a new legal hold.", "schema": { - "type": "string" - } + "type": "string", + "pattern": "^[0-9]+$" + }, + "example": "3074457345618265000", + "required": true }, { - "description": "Unique identifier of the board export job.", - "example": "92343229-c532-446d-b8cb-2f155bedb807", - "in": "query", - "name": "request_id", - "required": true, + "in": "path", + "name": "case_id", + "description": "The ID of the case in which you want to create a new legal hold.", "schema": { "type": "string", - "format": "uuid" - } + "pattern": "^[0-9]+$" + }, + "example": "3074457345619012007", + "required": true } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateBoardExportRequest" - } - } - }, - "required": true - }, "responses": { "200": { + "description": "Legal hold created successfully.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardExportJobId" + "$ref": "#/components/schemas/LegalHoldResponse" } } - }, - "description": "Unique identifier of the board export job" + } }, "400": { "$ref": "#/components/responses/400" @@ -1027,50 +1059,58 @@ "$ref": "#/components/responses/429" } }, - "summary": "Create board export job", - "tags": ["Board Export"] + "tags": ["Legal holds"] } }, - "/v2/orgs/{org_id}/boards/export/jobs/{job_id}": { + "/v2/orgs/{org_id}/cases/{case_id}/export-jobs": { "get": { "x-settings": { + "publish": true, "skip-tests": true }, - "description": "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.

", - "operationId": "enterprise-board-export-job-status", + "summary": "Get board export jobs of a case (Beta)", + "operationId": "get-legal-hold-export-jobs", + "description": "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.", "parameters": [ { - "description": "Unique identifier of the organization.", - "example": "3074457345821141000", + "$ref": "#/components/parameters/queryPageLimit" + }, + { + "$ref": "#/components/parameters/queryPageCursor" + }, + { "in": "path", "name": "org_id", - "required": true, + "description": "The ID of the organization for which you want to retrieve the list of export jobs within a case.", "schema": { - "type": "string" - } + "type": "string", + "pattern": "^[0-9]+$" + }, + "example": "3074457345618265000", + "required": true }, { - "description": "Unique identifier of the board export job.", - "example": "92343229-c532-446d-b8cb-2f155bedb807", "in": "path", - "name": "job_id", - "required": true, + "name": "case_id", + "description": "The ID of the case for which you want to retrieve the list of export jobs.", "schema": { "type": "string", - "format": "uuid" - } + "pattern": "^[0-9]+$" + }, + "example": "3074457345619012007", + "required": true } ], "responses": { "200": { + "description": "Export job objects containing job IDs.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardExportJobStatus" + "$ref": "#/components/schemas/PaginatedCaseExportJobsResponse" } } - }, - "description": "Board export job status" + } }, "400": { "$ref": "#/components/responses/400" @@ -1088,50 +1128,56 @@ "$ref": "#/components/responses/429" } }, - "summary": "Get board export job status", - "tags": ["Board Export"] + "tags": ["Legal holds"] } }, - "/v2/orgs/{org_id}/boards/export/jobs/{job_id}/results": { - "get": { + "/v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}": { + "delete": { "x-settings": { + "publish": true, "skip-tests": true }, - "description": "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.

", - "operationId": "enterprise-board-export-job-results", + "summary": "Close legal hold", + "operationId": "delete-legal-hold", + "description": "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.", "parameters": [ { - "description": "Unique identifier of the organization.", - "example": "3074457345821141000", "in": "path", "name": "org_id", - "required": true, + "description": "The ID of the organization in which you want to close a legal hold.", "schema": { - "type": "string" - } + "type": "string", + "pattern": "^[0-9]+$" + }, + "example": "3074457345618265000", + "required": true }, { - "description": "Unique identifier of the job.", - "example": "92343229-c532-446d-b8cb-2f155bedb807", "in": "path", - "name": "job_id", - "required": true, + "name": "case_id", + "description": "The ID of the case in which you want to close a legal hold.", "schema": { "type": "string", - "format": "uuid" - } + "pattern": "^[0-9]+$" + }, + "example": "3074457345619012007", + "required": true + }, + { + "in": "path", + "name": "legal_hold_id", + "description": "The ID of the legal hold you want to close.", + "schema": { + "type": "string", + "pattern": "^[0-9]+$" + }, + "example": "3074457345619013003", + "required": true } ], "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BoardExportResult" - } - } - }, - "description": "Board export job result" + "204": { + "description": "Legal hold closed successfully." }, "400": { "$ref": "#/components/responses/400" @@ -1149,129 +1195,61 @@ "$ref": "#/components/responses/429" } }, - "summary": "Get results for board export job", - "tags": ["Board Export"] - } - }, - "/v2/orgs/{org_id}/content-logs/items": { + "tags": ["Legal holds"] + }, "get": { "x-settings": { + "publish": true, "skip-tests": true }, - "description": "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.\n

Required scope

contentlogs:export\n

Rate limiting

Level 4\n

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.

\n", - "operationId": "enterprise-board-content-item-logs-fetch", + "summary": "Get legal hold information", + "operationId": "get-legal-hold", + "description": "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.", "parameters": [ { - "name": "org_id", - "description": "Unique identifier of the organization.", - "example": "3074457345821141000", "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "board_ids", - "description": "List of board IDs for which you want to retrieve the content logs.", - "example": ["o9J_kzlUDmo=", "u8J_kllZmDk="], - "in": "query", - "required": false, - "schema": { - "type": "array", - "maxItems": 15, - "items": { - "description": "Unique identifier of the board for which you want to retrieve the content logs.", - "type": "string", - "example": "o9J_kzlUDmo=" - } - } - }, - { - "name": "emails", - "description": "Filter content logs based on the list of emails of users who created, modified, or deleted the board item.", - "example": ["someone@domain.com", "someoneelse@domain.com"], - "in": "query", - "required": false, - "schema": { - "type": "array", - "maxItems": 15, - "items": { - "description": "Email of the user who created, modified, or deleted the board item.", - "type": "string", - "example": "someone@domain.com" - } - } - }, - { - "name": "from", - "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.\nFormat: 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)).\n", - "example": "2022-03-30T17:26:50Z", - "in": "query", - "required": true, - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "to", - "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\n[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)).\n", - "example": "2023-03-30T17:26:50Z", - "in": "query", - "required": true, + "name": "org_id", + "description": "The ID of the organization for which you want to retrieve the legal hold information.", "schema": { "type": "string", - "format": "date-time" - } - }, - { - "name": "cursor", - "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.\n", - "in": "query", - "required": false, - "schema": { - "type": "string" + "pattern": "^[0-9]+$" }, - "example": "MTY2OTg4NTIwMDAwMHwxMjM=" + "example": "3074457345618265000", + "required": true }, { - "name": "limit", - "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.\n", - "in": "query", - "required": false, + "in": "path", + "name": "case_id", + "description": "The ID of the case for which you want to retrieve the legal hold information.", "schema": { - "type": "integer", - "format": "int32", - "minimum": 1, - "maximum": 1000, - "default": 1000 + "type": "string", + "pattern": "^[0-9]+$" }, - "example": 1000 + "example": "3074457345619012007", + "required": true }, { - "name": "sorting", - "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`.\n", - "in": "query", - "required": false, + "in": "path", + "name": "legal_hold_id", + "description": "The ID of the legal hold you want to retrieve.", "schema": { "type": "string", - "default": "asc", - "enum": ["asc", "desc"] + "pattern": "^[0-9]+$" }, - "example": "asc" + "example": "3074457345619013003", + "required": true } ], "responses": { "200": { + "description": "Legal hold object", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetBoardItemContentLogsResponse" + "$ref": "#/components/schemas/LegalHoldResponse" } } - }, - "description": "Response from the API that includes content logs of board items such as data, size of the data list, pagination cursor, and pagination limit.\n" + } }, "400": { "$ref": "#/components/responses/400" @@ -1289,33 +1267,71 @@ "$ref": "#/components/responses/429" } }, - "summary": "Retrieve content change logs of board items", - "tags": ["Board Content Logs"] - } - }, - "/v2/sessions/reset_all": { - "post": { + "tags": ["Legal holds"] + }, + "put": { "x-settings": { + "publish": true, "skip-tests": true }, - "description": "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.

", - "operationId": "enterprise-post-user-sessions-reset", + "summary": "Edit legal hold", + "operationId": "edit-legal-hold", + "description": "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.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LegalHoldRequest" + } + } + }, + "required": true + }, "parameters": [ { - "in": "query", - "name": "email", - "required": true, - "description": "Email ID of the user whose sessions you want to reset. Note that this user will be signed out from all devices.", - "example": "john.smith@example.com", + "in": "path", + "name": "org_id", + "description": "The ID of the organization for which you want to edit the legal hold information.", "schema": { - "type": "string" - } + "type": "string", + "pattern": "^[0-9]+$" + }, + "example": "3074457345618265000", + "required": true + }, + { + "in": "path", + "name": "case_id", + "description": "The ID of the case for which you want to edit the legal hold information.", + "schema": { + "type": "string", + "pattern": "^[0-9]+$" + }, + "example": "3074457345619012007", + "required": true + }, + { + "in": "path", + "name": "legal_hold_id", + "description": "The ID of the legal hold you want to edit.", + "schema": { + "type": "string", + "pattern": "^[0-9]+$" + }, + "example": "3074457345619013003", + "required": true } ], "responses": { "200": { - "description": "User Sessions Reset", - "content": {} + "description": "Legal hold object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LegalHoldResponse" + } + } + } }, "400": { "$ref": "#/components/responses/400" @@ -1333,36 +1349,69 @@ "$ref": "#/components/responses/429" } }, - "summary": "Reset all sessions of a user", - "tags": ["Reset all sessions of a user"] + "tags": ["Legal holds"] } }, - "/v2/orgs/{org_id}": { + "/v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}/content-items": { "get": { - "description": "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.

", - "operationId": "enterprise-get-organization", + "x-settings": { + "publish": true, + "skip-tests": true + }, + "summary": "Get content items under legal hold", + "operationId": "get-legal-hold-content-items", + "description": "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.", "parameters": [ { - "description": "id of the organization", - "example": "3074457345821141000", "in": "path", "name": "org_id", - "required": true, + "description": "The ID of the organization for which you want to retrieve the list of content items under hold.", "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Organization" + "type": "string", + "pattern": "^[0-9]+$" + }, + "example": "3074457345618265000", + "required": true + }, + { + "in": "path", + "name": "case_id", + "description": "The ID of the case for which you want to retrieve the list of content items under hold.", + "schema": { + "type": "string", + "pattern": "^[0-9]+$" + }, + "example": "3074457345619012007", + "required": true + }, + { + "in": "path", + "name": "legal_hold_id", + "description": "The ID of the legal hold for which you want to retrieve the list of content items under hold.", + "schema": { + "type": "string", + "pattern": "^[0-9]+$" + }, + "example": "3074457345619013003", + "required": true + }, + { + "$ref": "#/components/parameters/queryPageLimit" + }, + { + "$ref": "#/components/parameters/queryPageCursor" + } + ], + "responses": { + "200": { + "description": "Content item objects", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedLegalHoldContentItemsResponse" } } - }, - "description": "Organization found" + } }, "400": { "$ref": "#/components/responses/400" @@ -1376,94 +1425,155 @@ "404": { "$ref": "#/components/responses/404" }, - "409": { - "$ref": "#/components/responses/409" - }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Get organization info", - "tags": ["Organizations"] + "tags": ["Legal holds"] } }, - "/v2/orgs/{org_id}/members": { - "get": { - "description": "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.

", - "operationId": "enterprise-get-organization-members", + "/v2/orgs/{org_id}/boards/export/jobs": { + "post": { + "x-settings": { + "skip-tests": true + }, + "description": "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.

", + "operationId": "enterprise-create-board-export", "parameters": [ { - "in": "query", - "name": "emails", + "description": "Unique identifier of the organization.", + "example": "3074457345821141000", + "in": "path", + "name": "org_id", + "required": true, "schema": { - "type": "string", - "description": "Emails of the organization members you want to retrieve. If you specify a value for the `emails` parameter, only the `emails` parameter is considered. All other filtering parameters are ignored. Maximum emails size is 10. Example: `emails=someEmail1@miro.com,someEmail2@miro.com`", - "example": "someEmail1@miro.com" + "type": "string" } }, { + "description": "Unique identifier of the board export job.", + "example": "92343229-c532-446d-b8cb-2f155bedb807", "in": "query", - "name": "role", + "name": "request_id", + "required": true, "schema": { "type": "string", - "description": "Filter organization members by role", - "enum": [ - "organization_internal_admin", - "organization_internal_user", - "organization_external_user", - "organization_team_guest_user", - "unknown" - ] + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateBoardExportRequest" + } } }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BoardExportJobId" + } + } + }, + "description": "Unique identifier of the board export job" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "425": { + "$ref": "#/components/responses/425" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Create board export job", + "tags": ["Board Export"] + }, + "get": { + "x-settings": { + "skip-tests": true + }, + "description": "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.

", + "operationId": "enterprise-board-export-jobs", + "parameters": [ { - "in": "query", - "name": "license", + "description": "Unique identifier of the organization.", + "example": "3074457345821141000", + "in": "path", + "name": "org_id", + "required": true, "schema": { - "type": "string", - "description": "Filter organization members by license", - "enum": ["full", "occasional", "free", "free_restricted", "full_trial", "unknown"] + "type": "string" } }, { + "name": "status", "in": "query", - "name": "active", + "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.", + "required": false, "schema": { - "type": "boolean", - "description": "Filter results based on whether the user is active or deactivated. Learn more about user deactivation." + "type": "array", + "items": { + "type": "string", + "description": "Indicates the current state of the board export job.\nPossible values:\n`JOB_STATUS_CREATED`: the job has been created but not yet started. Retry the status call after some time.\n`JOB_STATUS_IN_PROGRESS`: the job is in progress, and the results are not ready yet. Retry the status call after some time.\n`JOB_STATUS_CANCELLED`: the job has been cancelled and will not produce any more results.\n`JOB_STATUS_FINISHED`: the job is complete. You can now get results for the board export job.", + "example": "JOB_STATUS_CREATED" + } } }, { + "name": "creatorId", "in": "query", + "description": "Unique identifier of the board export job creator.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "example": [1234567890, 9876543210] + }, + { "name": "cursor", + "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.\n", + "in": "query", + "required": false, "schema": { "type": "string", - "description": "The ID of the organization member used as the reference for pagination. To retrieve the first portion of the collection don't pass a cursor value. To retrieve the next portion of the collection, set the `cursor` parameter value to the ID of the last organization member you received in the response of the previous request.", - "example": "3055557345821141000" - } + "format": "uuid" + }, + "example": "87a1a375-cee6-43f2-8049-5c9b5b6b9069" }, { - "in": "query", "name": "limit", + "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.\n", + "in": "query", + "required": false, "schema": { - "maximum": 100, - "minimum": 1, "type": "integer", - "description": "Limit for the number of organization members returned in the result list.", "format": "int32", - "example": 100, - "default": 100 - } - }, - { - "description": "id of the organization", - "example": "3074457345821141000", - "in": "path", - "name": "org_id", - "required": true, - "schema": { - "type": "string" - } + "minimum": 1, + "maximum": 500, + "default": 50 + }, + "example": 10 } ], "responses": { @@ -1471,18 +1581,11 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/OrganizationMembersSearchResponse" - }, - { - "$ref": "#/components/schemas/OrganizationMembersSearchByEmailsResponse" - } - ] + "$ref": "#/components/schemas/BoardExportJobsList" } } }, - "description": "Organization members queries successfully" + "description": "List of board export jobs." }, "400": { "$ref": "#/components/responses/400" @@ -1496,24 +1599,24 @@ "404": { "$ref": "#/components/responses/404" }, - "409": { - "$ref": "#/components/responses/409" - }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Get organization members", - "tags": ["Organization Members"] + "summary": "Get board export jobs list (Beta)", + "tags": ["Board Export"] } }, - "/v2/orgs/{org_id}/members/{member_id}": { + "/v2/orgs/{org_id}/boards/export/jobs/{job_id}": { "get": { - "description": "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.

", - "operationId": "enterprise-get-organization-member", + "x-settings": { + "skip-tests": true + }, + "description": "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.

", + "operationId": "enterprise-board-export-job-status", "parameters": [ { - "description": "id of the organization", + "description": "Unique identifier of the organization.", "example": "3074457345821141000", "in": "path", "name": "org_id", @@ -1523,13 +1626,14 @@ } }, { - "description": "id of the organization member", - "example": "3055557345821141000", + "description": "Unique identifier of the board export job.", + "example": "92343229-c532-446d-b8cb-2f155bedb807", "in": "path", - "name": "member_id", + "name": "job_id", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], @@ -1538,11 +1642,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OrganizationMember" + "$ref": "#/components/schemas/BoardExportJobStatus" } } }, - "description": "Organization member found" + "description": "Board export job status" }, "400": { "$ref": "#/components/responses/400" @@ -1556,120 +1660,41 @@ "404": { "$ref": "#/components/responses/404" }, - "409": { - "$ref": "#/components/responses/409" - }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Get organization member", - "tags": ["Organization Members"] + "summary": "Get board export job status", + "tags": ["Board Export"] } }, - "/v2/boards": { - "post": { - "description": "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
", - "operationId": "create-board", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BoardChanges" - } - } - } + "/v2/orgs/{org_id}/boards/export/jobs/{job_id}/results": { + "get": { + "x-settings": { + "skip-tests": true }, - "responses": { - "201": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BoardWithLinks" - } - } - }, - "description": "Board created" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "409": { - "$ref": "#/components/responses/409" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "summary": "Create board", - "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 \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", + "description": "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.

", + "operationId": "enterprise-board-export-job-results", "parameters": [ { - "in": "query", - "name": "team_id", - "schema": { - "type": "string", - "description": "The team_id for which you want to retrieve the list of boards. If this parameter is sent in the request, the `query` and `owner` parameters are ignored." - } - }, - { - "in": "query", - "name": "project_id", - "schema": { - "type": "string", - "description": "The `project_id` for which you want to retrieve the list of boards. If this parameter is sent in the request, the `query` and `owner` parameters are ignored." - } - }, - { - "in": "query", - "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.", - "maxLength": 500 - } - }, - { - "in": "query", - "name": "owner", - "schema": { - "type": "string", - "description": "Retrieves a list of boards that belong to a specific owner ID. You must pass the owner ID (for example, 3074457353169356300), not the owner name. You can use the 'owner' parameter with the `query` parameter to narrow down the board search results. Note that if you pass the `team_id` in the same request, the `owner` parameter is ignored." - } - }, - { - "in": "query", - "name": "limit", - "schema": { - "type": "string", - "description": "The maximum number of boards to retrieve.\nDefault: `20`", - "maximum": 50, - "minimum": 1 - } - }, - { - "in": "query", - "name": "offset", + "description": "Unique identifier of the organization.", + "example": "3074457345821141000", + "in": "path", + "name": "org_id", + "required": true, "schema": { - "type": "string", - "description": "The (zero-based) offset of the first item in the collection to return.\nDefault: `0`." + "type": "string" } }, { - "in": "query", - "name": "sort", + "description": "Unique identifier of the job.", + "example": "92343229-c532-446d-b8cb-2f155bedb807", + "in": "path", + "name": "job_id", + "required": true, "schema": { "type": "string", - "default": "default", - "description": "Sort order in which you want to view the result set. Options `last_created` and `alphabetically` are applicable only when you search for boards by team.\n* `default` - If `team_id` is present, `last_created`. Otherwise, `last_opened`.\n* `last_modified` - sort by the date and time when the board was last modified.\n* `last_opened` - sort by the date and time when the board was last opened.\n* `last_created` - sort by the date and time when the board was created.\n* `alphabetically` - sort by the board name (alphabetically).", - "enum": ["default", "last_modified", "last_opened", "last_created", "alphabetically"] + "format": "uuid" } } ], @@ -1678,15 +1703,21 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardsPagedResponse" + "$ref": "#/components/schemas/BoardExportResult" } } }, - "description": "Board search results." + "description": "Board export job result" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -1694,73 +1725,171 @@ "$ref": "#/components/responses/429" } }, - "summary": "Get boards", - "tags": ["boards"] - }, + "summary": "Get results for board export job", + "tags": ["Board Export"] + } + }, + "/v2/orgs/{org_id}/boards/export/jobs/{job_id}/status": { "put": { - "description": "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
", - "operationId": "copy-board", + "x-settings": { + "skip-tests": true + }, + "description": "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.

", + "operationId": "enterprise-update-board-export-job", "parameters": [ { - "description": "Unique identifier (ID) of the board that you want to copy.", - "in": "query", - "name": "copy_from", + "description": "Unique identifier of the organization.", + "example": "3074457345821141000", + "in": "path", + "name": "org_id", "required": true, "schema": { "type": "string" } + }, + { + "description": "Unique identifier of the board export job.", + "example": "92343229-c532-446d-b8cb-2f155bedb807", + "in": "path", + "name": "job_id", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CopyBoardChanges" + "type": "object", + "required": ["status"], + "properties": { + "status": { + "description": "Only the `CANCELLED` status is currently supported.", + "type": "string", + "enum": ["CANCELLED"] + } + }, + "example": { + "status": "CANCELLED" + } } } } }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardWithLinksAndWithoutProject" + "type": "object", + "required": ["status"], + "properties": { + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/BoardExportJobStatus" + }, + { + "type": "string", + "example": "CANCELLED" + } + ] + } + } } } }, - "description": "Board copied" + "description": "Update board export job status" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, - "409": { - "$ref": "#/components/responses/409" - }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Copy board", - "tags": ["boards"] + "summary": "Update board export job status (Beta)", + "tags": ["Board Export"] } }, - "/v2/boards/{board_id}": { + "/v2/orgs/{org_id}/boards/export/jobs/{job_id}/tasks": { "get": { - "description": "Retrieves information about a board.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-specific-board", + "x-settings": { + "skip-tests": true + }, + "description": "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.

", + "operationId": "enterprise-board-export-job-tasks", "parameters": [ { - "description": "Unique identifier (ID) of the board that you want to retrieve.", + "description": "Unique identifier of the organization.", + "example": "3074457345821141000", "in": "path", - "name": "board_id", + "name": "org_id", "required": true, "schema": { "type": "string" } + }, + { + "description": "Unique identifier of the board export job.", + "example": "08ac2d88-c3a7-46a1-923d-b5fb88ff3fe2", + "in": "path", + "name": "job_id", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "status", + "in": "query", + "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.", + "required": false, + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExportTaskStatusFilter" + } + }, + "example": "TASK_STATUS_CREATED" + }, + { + "name": "cursor", + "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.\n", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + }, + "example": "87a1a375-cee6-43f2-8049-5c9b5b6b9069" + }, + { + "name": "limit", + "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.\n", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 500, + "default": 50 + }, + "example": 50 } ], "responses": { @@ -1768,15 +1897,21 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardWithLinksAndLastOpened" + "$ref": "#/components/schemas/BoardExportJobTasksList" } } }, - "description": "Board retrieved" + "description": "List of tasks for the board export job." }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -1784,144 +1919,214 @@ "$ref": "#/components/responses/429" } }, - "summary": "Get specific board", - "tags": ["boards"] - }, - "patch": { - "description": "Updates a specific board.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "update-board", + "summary": "Get board export job tasks list (Beta)", + "tags": ["Board Export"] + } + }, + "/v2/orgs/{org_id}/boards/export/jobs/{job_id}/tasks/{task_id}/export-link": { + "post": { + "x-settings": { + "skip-tests": true + }, + "description": "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.

", + "operationId": "enterprise-create-board-export-task-export-link", "parameters": [ { - "description": "Unique identifier (ID) of the board that you want to update.", + "description": "Unique identifier of the organization.", + "example": "3074457345821141000", "in": "path", - "name": "board_id", + "name": "org_id", "required": true, "schema": { "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BoardChanges" - } + }, + { + "description": "Unique identifier of the board export job.", + "example": "08ac2d88-c3a7-46a1-923d-b5fb88ff3fe2", + "in": "path", + "name": "job_id", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "required": true - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BoardWithLinks" - } - } - }, - "description": "Board updated" - }, - "202": { - "description": "The board update operation has been accepted and will be processed asynchronously. If the operation exceeds the expected duration, a response will be returned.\nTo monitor the status of the board update, use the Get specific board API. This API allows you to verify whether the board has been successfully updated." - }, - "400": { - "$ref": "#/components/responses/400" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "409": { - "$ref": "#/components/responses/409" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "summary": "Update board", - "tags": ["boards"] - }, - "delete": { - "description": "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
", - "operationId": "delete-board", - "parameters": [ { - "description": "Unique identifier (ID) of the board that you want to delete.", + "description": "Unique identifier of the board export task.", + "example": "9394a815-86ea-418c-8bfc-71772fdb692d", "in": "path", - "name": "board_id", + "name": "task_id", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "responses": { - "204": { + "200": { "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/BoardExportTaskExportLink" } } }, - "description": "Board deleted" + "description": "Link to download the results of a board export task." }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, - "409": { - "$ref": "#/components/responses/409" + "425": { + "$ref": "#/components/responses/425" }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Delete board", - "tags": ["boards"] + "summary": "Create task export link (Beta)", + "tags": ["Board Export"] } }, - "/v2/boards/{board_id}/app_cards": { - "post": { - "description": "Adds an app card item to a board.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "create-app-card-item", + "/v2/orgs/{org_id}/content-logs/items": { + "get": { + "x-settings": { + "skip-tests": true + }, + "description": "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.\n

Required scope

contentlogs:export\n

Rate limiting

Level 4\n

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.

\n", + "operationId": "enterprise-board-content-item-logs-fetch", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to create the item.", + "name": "org_id", + "description": "Unique identifier of the organization.", + "example": "3074457345821141000", "in": "path", - "name": "board_id", "required": true, "schema": { "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AppCardCreateRequest" + }, + { + "name": "board_ids", + "description": "List of board IDs for which you want to retrieve the content logs.", + "example": ["o9J_kzlUDmo=", "u8J_kllZmDk="], + "in": "query", + "required": false, + "schema": { + "type": "array", + "maxItems": 15, + "items": { + "description": "Unique identifier of the board for which you want to retrieve the content logs.", + "type": "string", + "example": "o9J_kzlUDmo=" } } }, - "required": true - }, + { + "name": "emails", + "description": "Filter content logs based on the list of emails of users who created, modified, or deleted the board item.", + "example": ["someone@domain.com", "someoneelse@domain.com"], + "in": "query", + "required": false, + "schema": { + "type": "array", + "maxItems": 15, + "items": { + "description": "Email of the user who created, modified, or deleted the board item.", + "type": "string", + "example": "someone@domain.com" + } + } + }, + { + "name": "from", + "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.\nFormat: 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)).\n", + "example": "2022-03-30T17:26:50Z", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "to", + "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\n[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)).\n", + "example": "2023-03-30T17:26:50Z", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "cursor", + "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.\n", + "in": "query", + "required": false, + "schema": { + "type": "string" + }, + "example": "MTY2OTg4NTIwMDAwMHwxMjM=" + }, + { + "name": "limit", + "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.\n", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 1000, + "default": 1000 + }, + "example": 1000 + }, + { + "name": "sorting", + "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`.\n", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "asc", + "enum": ["asc", "desc"] + }, + "example": "asc" + } + ], "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AppCardItem" + "$ref": "#/components/schemas/GetBoardItemContentLogsResponse" } } }, - "description": "App card item created" + "description": "Response from the API that includes content logs of board items such as data, size of the data list, pagination cursor, and pagination limit.\n" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -1929,32 +2134,23 @@ "$ref": "#/components/responses/429" } }, - "summary": "Create app card item", - "tags": ["app_cards"] + "summary": "Retrieve content change logs of board items", + "tags": ["Board Content Logs"] } }, - "/v2/boards/{board_id}/app_cards/{item_id}": { + "/v2/orgs/{org_id}/groups": { "get": { - "description": "Retrieves information for a specific app card item on a board.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-app-card-item", + "description": "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.

", + "operationId": "enterprise-get-groups", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathOrgId" }, { - "description": "Unique identifier (ID) of the item that you want to retrieve.", - "in": "path", - "name": "item_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/queryLimitGroups" + }, + { + "$ref": "#/components/parameters/queryCursorGroups" } ], "responses": { @@ -1962,74 +2158,65 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AppCardItem" + "$ref": "#/components/schemas/GroupsPage" } } }, - "description": "App card item retrieved" + "description": "Page of user groups" }, "400": { "$ref": "#/components/responses/400" }, - "404": { - "$ref": "#/components/responses/404" + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Get app card item", - "tags": ["app_cards"] + "summary": "List of user groups", + "tags": ["User groups"] }, - "patch": { - "description": "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
", - "operationId": "update-app-card-item", + "post": { + "description": "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.

", + "operationId": "enterprise-create-group", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to update the item.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Unique identifier (ID) of the item that you want to update.", - "in": "path", - "name": "item_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathOrgId" } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AppCardUpdateRequest" + "$ref": "#/components/schemas/CreateGroupRequest" } } }, "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AppCardItem" + "$ref": "#/components/schemas/Group" } } }, - "description": "Card item updated" + "description": "User group" }, "400": { "$ref": "#/components/responses/400" }, - "404": { - "$ref": "#/components/responses/404" + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" }, "409": { "$ref": "#/components/responses/409" @@ -2038,46 +2225,42 @@ "$ref": "#/components/responses/429" } }, - "summary": "Update app card item", - "tags": ["app_cards"] - }, - "delete": { - "description": "Deletes an app card item from a board.

Required scope

boards:write

Rate limiting

Level 3
", - "operationId": "delete-app-card-item", + "summary": "Create user group", + "tags": ["User groups"] + } + }, + "/v2/orgs/{org_id}/groups/{group_id}": { + "get": { + "description": "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.

", + "operationId": "enterprise-get-group", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to delete an item.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathOrgId" }, { - "description": "Unique identifier (ID) of the item that you want to delete.", - "in": "path", - "name": "item_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathGroupId" } ], "responses": { - "204": { + "200": { "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/Group" } } }, - "description": "App card item deleted" + "description": "User group" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -2085,98 +2268,87 @@ "$ref": "#/components/responses/429" } }, - "summary": "Delete app card item", - "tags": ["app_cards"] - } - }, - "/v2/boards/{board_id}/cards": { - "post": { - "description": "Adds a card item to a board

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "create-card-item", + "summary": "Get user group", + "tags": ["User groups"] + }, + "patch": { + "description": "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.

", + "operationId": "enterprise-update-group", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to create the item.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathOrgId" + }, + { + "$ref": "#/components/parameters/pathGroupId" } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CardCreateRequest" + "$ref": "#/components/schemas/UpdateGroupRequest" } } }, "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CardItem" + "$ref": "#/components/schemas/Group" } } }, - "description": "Card item created" + "description": "User group" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, + "409": { + "$ref": "#/components/responses/409" + }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Create card item", - "tags": ["cards"] - } - }, - "/v2/boards/{board_id}/cards/{item_id}": { - "get": { - "description": "Retrieves information for a specific card item on a board

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-card-item", + "summary": "Update user group", + "tags": ["User groups"] + }, + "delete": { + "description": "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.

", + "operationId": "enterprise-delete-group", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathOrgId" }, { - "description": "Unique identifier (ID) of the item that you want to retrieve.", - "in": "path", - "name": "item_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathGroupId" } ], "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CardItem" - } - } - }, - "description": "Card item retrieved" + "204": { + "description": "User group deleted" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -2184,197 +2356,177 @@ "$ref": "#/components/responses/429" } }, - "summary": "Get card item", - "tags": ["cards"] - }, - "patch": { - "description": "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
", - "operationId": "update-card-item", + "summary": "Delete user group", + "tags": ["User groups"] + } + }, + "/v2/orgs/{org_id}/groups/{group_id}/members": { + "get": { + "description": "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.

", + "operationId": "enterprise-get-group-members", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to update the item.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathOrgId" }, { - "description": "Unique identifier (ID) of the item that you want to update.", - "in": "path", - "name": "item_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathGroupId" + }, + { + "$ref": "#/components/parameters/queryLimitGroupMembers" + }, + { + "$ref": "#/components/parameters/queryCursorGroupMembers" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CardUpdateRequest" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CardItem" + "$ref": "#/components/schemas/GroupMembersPage" } } }, - "description": "Card item updated" + "description": "Page of user group members" }, "400": { "$ref": "#/components/responses/400" }, - "404": { - "$ref": "#/components/responses/404" + "401": { + "$ref": "#/components/responses/401" }, - "409": { - "$ref": "#/components/responses/409" + "403": { + "$ref": "#/components/responses/403" }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Update card item", - "tags": ["cards"] + "summary": "List of user group members", + "tags": ["User group members"] }, - "delete": { - "description": "Deletes a card item from the board.

Required scope

boards:write

Rate limiting

Level 3
", - "operationId": "delete-card-item", + "post": { + "description": "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.

", + "operationId": "enterprise-create-group-member", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to delete the item.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathOrgId" }, { - "description": "Unique identifier (ID) of the item that you want to delete.", - "in": "path", - "name": "item_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathGroupId" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateGroupMemberRequest" + } + } + }, + "required": true + }, "responses": { - "204": { + "201": { "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/GroupMember" } } }, - "description": "Card item deleted" + "description": "User group member" }, "400": { "$ref": "#/components/responses/400" }, - "404": { - "$ref": "#/components/responses/404" + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "409": { + "$ref": "#/components/responses/409" }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Delete card item", - "tags": ["cards"] - } - }, - "/v2/boards/{board_id}/connectors": { - "post": { - "description": "Adds a connector to a board.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "create-connector", + "summary": "Create user group member", + "tags": ["User group members"] + }, + "patch": { + "description": "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.

", + "operationId": "enterprise-update-group-members", "parameters": [ { - "description": "Unique identifier (ID) of the board for which you want to create the connector.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathOrgId" + }, + { + "$ref": "#/components/parameters/pathGroupId" } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ConnectorCreationData" + "$ref": "#/components/schemas/UpdateUserGroupMembersRequest" } } }, "required": true }, "responses": { - "200": { + "207": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ConnectorWithLinks" + "$ref": "#/components/schemas/UpdateUserGroupMembersResult" } } }, - "description": "Connector created" + "description": "Status codes for adding or removing members of a user group." }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, + "409": { + "$ref": "#/components/responses/409" + }, + "413": { + "$ref": "#/components/responses/413" + }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Create connector", - "tags": ["connectors"] - }, + "summary": "Bulk edit of membership in user group", + "tags": ["User group members"] + } + }, + "/v2/orgs/{org_id}/groups/{group_id}/members/{member_id}": { "get": { - "description": "Retrieves a list of connectors for a specific board.\n\nThis 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
", - "operationId": "get-connectors", + "description": "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.

", + "operationId": "enterprise-get-group-member", "parameters": [ { - "in": "query", - "name": "limit", - "schema": { - "type": "string", - "default": "10", - "description": "The maximum number of results to return per call. If the number of connectors in the response is greater than the limit specified, the response returns the cursor parameter with a value.", - "maximum": 50, - "minimum": 10 - } + "$ref": "#/components/parameters/pathOrgId" }, { - "in": "query", - "name": "cursor", - "schema": { - "type": "string", - "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." - } + "$ref": "#/components/parameters/pathGroupId" }, { - "description": "Unique identifier (ID) of the board from which you want to retrieve a list of connectors.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathGroupMemberId" } ], "responses": { @@ -2382,15 +2534,21 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ConnectorsCursorPaged" + "$ref": "#/components/schemas/GroupMember" } } }, - "description": "Connectors retrieved" + "description": "User group member" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -2398,32 +2556,63 @@ "$ref": "#/components/responses/429" } }, - "summary": "Get connectors", - "tags": ["connectors"] - } - }, - "/v2/boards/{board_id}/connectors/{connector_id}": { - "get": { - "description": "Retrieves information for a specific connector on a board.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-connector", + "summary": "Get user group member", + "tags": ["User group members"] + }, + "delete": { + "description": "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.

", + "operationId": "enterprise-delete-group-member", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to retrieve a specific connector.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathOrgId" }, { - "description": "Unique identifier (ID) of the connector that you want to retrieve.", - "in": "path", - "name": "connector_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathGroupId" + }, + { + "$ref": "#/components/parameters/pathGroupMemberId" + } + ], + "responses": { + "204": { + "description": "User group member object deleted" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Delete user group member", + "tags": ["User group members"] + } + }, + "/v2/orgs/{org_id}/groups/{group_id}/teams": { + "get": { + "description": "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.

", + "operationId": "enterprise-groups-get-teams", + "parameters": [ + { + "$ref": "#/components/parameters/pathOrgId" + }, + { + "$ref": "#/components/parameters/pathGroupId" + }, + { + "$ref": "#/components/parameters/queryLimitGroupTeams" + }, + { + "$ref": "#/components/parameters/queryCursorGroupTeams" } ], "responses": { @@ -2431,153 +2620,133 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ConnectorWithLinks" + "$ref": "#/components/schemas/GroupTeamsPage" } } }, - "description": "Connector retrieved" + "description": "Page of teams to user group connections" }, "400": { "$ref": "#/components/responses/400" }, - "404": { - "$ref": "#/components/responses/404" + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Get specific connector", - "tags": ["connectors"] - }, - "patch": { - "description": "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
", - "operationId": "update-connector", + "summary": "Get teams of a user group", + "tags": ["User group to teams"] + } + }, + "/v2/orgs/{org_id}/groups/{group_id}/teams/{team_id}": { + "get": { + "description": "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.

", + "operationId": "enterprise-groups-get-team", "parameters": [ { - "description": "Unique identifier (ID) of the board for which you want to update the connector.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathOrgId" }, { - "description": "Unique identifier (ID) of the connector that you want to update.", - "in": "path", - "name": "connector_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathGroupId" + }, + { + "$ref": "#/components/parameters/pathTeamId" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConnectorChangesData" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ConnectorWithLinks" + "$ref": "#/components/schemas/GroupTeam" } } }, - "description": "Connector updated" + "description": "Team to user group connection" }, "400": { "$ref": "#/components/responses/400" }, - "404": { - "$ref": "#/components/responses/404" + "401": { + "$ref": "#/components/responses/401" }, - "409": { - "$ref": "#/components/responses/409" + "403": { + "$ref": "#/components/responses/403" }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Update connector", - "tags": ["connectors"] - }, - "delete": { - "description": "Deletes the specified connector from the board.

Required scope

boards:write

Rate limiting

Level 3
", - "operationId": "delete-connector", + "summary": "Get user group team", + "tags": ["User group to teams"] + } + }, + "/v2/orgs/{org_id}/teams/{team_id}/groups": { + "get": { + "description": "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.

", + "operationId": "enterprise-teams-get-groups", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to delete the connector.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathOrgId" }, { - "description": "Unique identifier (ID) of the connector that you want to delete.", - "in": "path", - "name": "connector_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathTeamId" + }, + { + "$ref": "#/components/parameters/queryLimitTeamGroups" + }, + { + "$ref": "#/components/parameters/queryCursorTeamGroups" } ], "responses": { - "204": { + "200": { "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/TeamGroupsPage" } } }, - "description": "Connector deleted" + "description": "Page of user groups to team connections" }, "400": { "$ref": "#/components/responses/400" }, - "404": { - "$ref": "#/components/responses/404" + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Delete connector", - "tags": ["connectors"] - } - }, - "/v2/boards/{board_id}/documents": { + "summary": "List of user group to team connections", + "tags": ["Team user groups"] + }, "post": { - "description": "Adds a document item to a board by specifying the URL where the document is hosted.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "create-document-item-using-url", + "description": "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.

'", + "operationId": "enterprise-teams-create-group", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to create the item.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathOrgId" + }, + { + "$ref": "#/components/parameters/pathTeamId" } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentCreateRequest" + "$ref": "#/components/schemas/CreateTeamGroupRequest" } } }, @@ -2588,48 +2757,45 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentItem" + "$ref": "#/components/schemas/TeamGroup" } } }, - "description": "Document item created" + "description": "User group to team connection" }, "400": { "$ref": "#/components/responses/400" }, - "404": { - "$ref": "#/components/responses/404" + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "409": { + "$ref": "#/components/responses/409" }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Create document item using URL", - "tags": ["documents"] + "summary": "Create user group to team connection", + "tags": ["Team user groups"] } }, - "/v2/boards/{board_id}/documents/{item_id}": { + "/v2/orgs/{org_id}/teams/{team_id}/groups/{group_id}": { "get": { - "description": "Retrieves information for a specific document item on a board

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-document-item", + "description": "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.

", + "operationId": "enterprise-teams-get-group", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathOrgId" }, { - "description": "Unique identifier (ID) of the item that you want to retrieve.", - "in": "path", - "name": "item_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathTeamId" + }, + { + "$ref": "#/components/parameters/pathGroupId" } ], "responses": { @@ -2637,15 +2803,21 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentItem" + "$ref": "#/components/schemas/TeamGroup" } } }, - "description": "Document item retrieved" + "description": "Get user group of a team" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -2653,56 +2825,36 @@ "$ref": "#/components/responses/429" } }, - "summary": "Get document item", - "tags": ["documents"] + "summary": "Get user group of a team", + "tags": ["Team user groups"] }, - "patch": { - "description": "Updates a document item on a board

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "update-document-item-using-url", + "delete": { + "description": "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.

", + "operationId": "enterprise-teams-delete-group", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to update the item.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathOrgId" }, { - "description": "Unique identifier (ID) of the item that you want to update.", - "in": "path", - "name": "item_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathTeamId" + }, + { + "$ref": "#/components/parameters/pathGroupId" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DocumentUpdateRequest" - } - } - }, - "required": true - }, "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DocumentItem" - } - } - }, - "description": "Document item updated" + "204": { + "description": "User group to team connection deleted" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -2713,46 +2865,48 @@ "$ref": "#/components/responses/429" } }, - "summary": "Update document item using URL", - "tags": ["documents"] - }, - "delete": { - "description": "Deletes a document item from the board.

Required scope

boards:write

Rate limiting

Level 3
", - "operationId": "delete-document-item", + "summary": "Delete user group to team connection", + "tags": ["Team user groups"] + } + }, + "/v2/orgs/{org_id}/boards/{board_id}/groups": { + "get": { + "description": "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.

", + "operationId": "enterprise-boards-get-groups", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to delete the item.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathOrgId" }, { - "description": "Unique identifier (ID) of the item that you want to delete.", - "in": "path", - "name": "item_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathBoardId" + }, + { + "$ref": "#/components/parameters/queryLimitBoardUserGroups" + }, + { + "$ref": "#/components/parameters/queryCursorBoardUserGroups" } ], "responses": { - "204": { + "200": { "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/BoardUserGroupsPage" } } }, - "description": "Document item deleted" + "description": "Get user groups assigned to board" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -2760,155 +2914,89 @@ "$ref": "#/components/responses/429" } }, - "summary": "Delete document item", - "tags": ["documents"] - } - }, - "/v2/boards/{board_id}/embeds": { + "summary": "Get board user group assignments", + "tags": ["Share boards with groups"] + }, "post": { - "description": "Adds an embed item containing external content to a board.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "create-embed-item", + "description": "Shares a board with user groups with a specified role.

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.

", + "operationId": "enterprise-boards-create-group", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to create the item.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathOrgId" + }, + { + "$ref": "#/components/parameters/pathBoardId" } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EmbedCreateRequest" + "$ref": "#/components/schemas/CreateBoardUserGroupsRequest" } } }, "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EmbedItem" + "$ref": "#/components/schemas/BoardUserGroup" } } }, - "description": "Embed item created" + "description": "User group role assignment on board" }, "400": { "$ref": "#/components/responses/400" }, - "404": { - "$ref": "#/components/responses/404" + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "409": { + "$ref": "#/components/responses/409" }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Create embed item", - "tags": ["embeds"] + "summary": "Create board user group assignments", + "tags": ["Share boards with groups"] } }, - "/v2/boards/{board_id}/embeds/{item_id}": { - "get": { - "description": "Retrieves information for a specific embed item on a board.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-embed-item", + "/v2/orgs/{org_id}/boards/{board_id}/groups/{group_id}": { + "delete": { + "description": "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.

", + "operationId": "enterprise-boards-delete-groups", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Unique identifier (ID) of the item that you want to retrieve.", - "in": "path", - "name": "item_id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EmbedItem" - } - } - }, - "description": "Embed item retrieved" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "404": { - "$ref": "#/components/responses/404" + "$ref": "#/components/parameters/pathOrgId" }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "summary": "Get embed item", - "tags": ["embeds"] - }, - "patch": { - "description": "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
", - "operationId": "update-embed-item", - "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to update the item.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathBoardId" }, { - "description": "Unique identifier (ID) of the item that you want to update.", - "in": "path", - "name": "item_id", - "required": true, - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/pathGroupId" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EmbedUpdateRequest" - } - } - }, - "required": true - }, "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EmbedItem" - } - } - }, - "description": "Embed item updated" + "204": { + "description": "User group to board assignment deleted" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -2919,46 +3007,43 @@ "$ref": "#/components/responses/429" } }, - "summary": "Update embed item", - "tags": ["embeds"] - }, - "delete": { - "description": "Deletes an embed item from the board.

Required scope

boards:write

Rate limiting

Level 3
", - "operationId": "delete-embed-item", + "summary": "Delete board user group assignment", + "tags": ["Share boards with groups"] + } + }, + "/v2/sessions/reset_all": { + "post": { + "x-settings": { + "skip-tests": true + }, + "description": "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.

", + "operationId": "enterprise-post-user-sessions-reset", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to delete the item.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Unique identifier (ID) of the item that you want to delete.", - "in": "path", - "name": "item_id", + "in": "query", + "name": "email", "required": true, + "description": "Email ID of the user whose sessions you want to reset. Note that this user will be signed out from all devices.", + "example": "john.smith@example.com", "schema": { "type": "string" } } ], "responses": { - "204": { - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - }, - "description": "Embed item deleted" + "200": { + "description": "User Sessions Reset", + "content": {} }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -2966,84 +3051,133 @@ "$ref": "#/components/responses/429" } }, - "summary": "Delete embed item", - "tags": ["embeds"] + "summary": "Reset all sessions of a user", + "tags": ["Reset all sessions of a user"] } }, - "/v2/boards/{board_id}/images": { - "post": { - "x-settings": { - "skip-tests": true - }, - "description": "Adds an image item to a board by specifying an image URL.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "create-image-item-using-url", + "/v2/orgs/{org_id}": { + "get": { + "description": "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.

", + "operationId": "enterprise-get-organization", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to create the item.", + "description": "id of the organization", + "example": "3074457345821141000", "in": "path", - "name": "board_id", + "name": "org_id", "required": true, "schema": { "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ImageCreateRequest" - } - } - }, - "required": true - }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ImageItem" + "$ref": "#/components/schemas/Organization" } } }, - "description": "Image item created" + "description": "Organization found" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, + "409": { + "$ref": "#/components/responses/409" + }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Create image item using URL", - "tags": ["images"] + "summary": "Get organization info", + "tags": ["Organizations"] } }, - "/v2/boards/{board_id}/images/{item_id}": { + "/v2/orgs/{org_id}/members": { "get": { - "x-settings": { - "skip-tests": true - }, - "description": "Retrieves information for a specific image item on a board.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-image-item", + "description": "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.

", + "operationId": "enterprise-get-organization-members", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", - "in": "path", - "name": "board_id", - "required": true, + "in": "query", + "name": "emails", "schema": { - "type": "string" + "type": "string", + "description": "Emails of the organization members you want to retrieve. If you specify a value for the `emails` parameter, only the `emails` parameter is considered. All other filtering parameters are ignored. Maximum emails size is 10. Example: `emails=someEmail1@miro.com,someEmail2@miro.com`", + "example": "someEmail1@miro.com" } }, { - "description": "Unique identifier (ID) of the item that you want to retrieve.", + "in": "query", + "name": "role", + "schema": { + "type": "string", + "description": "Filter organization members by role", + "enum": [ + "organization_internal_admin", + "organization_internal_user", + "organization_external_user", + "organization_team_guest_user", + "unknown" + ] + } + }, + { + "in": "query", + "name": "license", + "schema": { + "type": "string", + "description": "Filter organization members by license", + "enum": ["full", "occasional", "free", "free_restricted", "full_trial", "unknown"] + } + }, + { + "in": "query", + "name": "active", + "schema": { + "type": "boolean", + "description": "Filter results based on whether the user is active or deactivated. Learn more about user deactivation." + } + }, + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string", + "description": "The ID of the organization member used as the reference for pagination. To retrieve the first portion of the collection don't pass a cursor value. To retrieve the next portion of the collection, set the `cursor` parameter value to the ID of the last organization member you received in the response of the previous request.", + "example": "3055557345821141000" + } + }, + { + "in": "query", + "name": "limit", + "schema": { + "maximum": 100, + "minimum": 1, + "type": "integer", + "description": "Limit for the number of organization members returned in the result list.", + "format": "int32", + "example": 100, + "default": 100 + } + }, + { + "description": "id of the organization", + "example": "3074457345821141000", "in": "path", - "name": "item_id", + "name": "org_id", "required": true, "schema": { "type": "string" @@ -3055,75 +3189,88 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ImageItem" + "oneOf": [ + { + "$ref": "#/components/schemas/OrganizationMembersSearchResponse" + }, + { + "$ref": "#/components/schemas/OrganizationMembersSearchByEmailsResponse" + } + ] } } }, - "description": "Image item retrieved" + "description": "Organization members queries successfully" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, + "409": { + "$ref": "#/components/responses/409" + }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Get image item", - "tags": ["images"] - }, - "patch": { - "x-settings": { - "skip-tests": true - }, - "description": "Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "update-image-item-using-url", + "summary": "Get organization members", + "tags": ["Organization Members"] + } + }, + "/v2/orgs/{org_id}/members/{member_id}": { + "get": { + "description": "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.

", + "operationId": "enterprise-get-organization-member", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to update the item.", + "description": "id of the organization", + "example": "3074457345821141000", "in": "path", - "name": "board_id", + "name": "org_id", "required": true, "schema": { "type": "string" } }, { - "description": "Unique identifier (ID) of the item that you want to update.", + "description": "id of the organization member", + "example": "3055557345821141000", "in": "path", - "name": "item_id", + "name": "member_id", "required": true, "schema": { "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ImageUpdateRequest" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ImageItem" + "$ref": "#/components/schemas/OrganizationMember" } } }, - "description": "Image item updated" + "description": "Organization member found" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -3134,45 +3281,33 @@ "$ref": "#/components/responses/429" } }, - "summary": "Update image item using URL", - "tags": ["images"] - }, - "delete": { - "x-settings": { - "skip-tests": true - }, - "description": "Deletes an image item from the board.

Required scope

boards:write

Rate limiting

Level 3
", - "operationId": "delete-image-item", - "parameters": [ - { - "description": "Unique identifier (ID) of the board from which you want to delete the item.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Unique identifier (ID) of the item that you want to delete.", - "in": "path", - "name": "item_id", - "required": true, - "schema": { - "type": "string" + "summary": "Get organization member", + "tags": ["Organization Members"] + } + }, + "/v2/boards": { + "post": { + "description": "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
", + "operationId": "create-board", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BoardChanges" + } } } - ], + }, "responses": { - "204": { + "201": { "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/BoardWithLinks" } } }, - "description": "Image item deleted" + "description": "Board created" }, "400": { "$ref": "#/components/responses/400" @@ -3180,65 +3315,79 @@ "404": { "$ref": "#/components/responses/404" }, + "409": { + "$ref": "#/components/responses/409" + }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Delete image item", - "tags": ["images"] - } - }, - "/v2/boards/{board_id}/items": { + "summary": "Create board", + "tags": ["boards"] + }, "get": { - "description": "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.\n\nThis 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
", - "operationId": "get-items", + "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", + "operationId": "get-boards", "parameters": [ { "in": "query", - "name": "limit", + "name": "team_id", "schema": { "type": "string", - "default": "10", - "description": "The maximum number of results to return per call. If the number of items in the response is greater than the limit specified, the response returns the cursor parameter with a value.", - "maximum": 50, - "minimum": 10 + "description": "The team_id for which you want to retrieve the list of boards. If this parameter is sent in the request, the `query` and `owner` parameters are ignored." } }, { "in": "query", - "name": "type", + "name": "project_id", "schema": { "type": "string", - "enum": [ - "text", - "shape", - "sticky_note", - "image", - "document", - "card", - "app_card", - "preview", - "frame", - "embed" - ], - "description": "If you want to get a list of items of a specific type, specify an item type. For example, if you want to retrieve the list of card items, set `type` to `cards`.\n Possible values: `app_card`, `card`, `document`, `embed`, `frame`, `image`, `shape`, `sticky_note`, `text`" + "description": "The `project_id` for which you want to retrieve the list of boards.
**Note:** Projects have been renamed to Spaces. Use this as the unique identifier (ID) of the space. If this parameter is included in the request, the `query` and `owner` parameters are ignored." } }, { "in": "query", - "name": "cursor", + "name": "query", "schema": { "type": "string", - "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": "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.", + "maxLength": 500 } }, { - "description": "Unique identifier (ID) of the board for which you want to retrieve the list of available items.", - "in": "path", - "name": "board_id", - "required": true, + "in": "query", + "name": "owner", "schema": { - "type": "string" + "type": "string", + "description": "Retrieves a list of boards that belong to a specific owner ID. You must pass the owner ID (for example, 3074457353169356300), not the owner name. You can use the 'owner' parameter with the `query` parameter to narrow down the board search results. Note that if you pass the `team_id` in the same request, the `owner` parameter is ignored." + } + }, + { + "in": "query", + "name": "limit", + "schema": { + "type": "string", + "description": "The maximum number of boards to retrieve.\nDefault: `20`", + "maximum": 50, + "minimum": 1 + } + }, + { + "in": "query", + "name": "offset", + "schema": { + "type": "string", + "description": "The (zero-based) offset of the first item in the collection to return.\nDefault: `0`." + } + }, + { + "in": "query", + "name": "sort", + "schema": { + "type": "string", + "default": "default", + "description": "Sort order in which you want to view the result set. The parameter is applicable only when you search for boards by team or project.\n* `default` - If `team_id` is present, `last_created`. Otherwise, `last_opened`.\n* `last_modified` - sort by the date and time when the board was last modified.\n* `last_opened` - sort by the date and time when the board was last opened.\n* `last_created` - sort by the date and time when the board was created.\n* `alphabetically` - sort by the board name (alphabetically).", + "enum": ["default", "last_modified", "last_opened", "last_created", "alphabetically"] } } ], @@ -3247,11 +3396,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GenericItemCursorPaged" + "$ref": "#/components/schemas/BoardsPagedResponse" } } }, - "description": "Items retrieved" + "description": "Board search results." }, "400": { "$ref": "#/components/responses/400" @@ -3263,28 +3412,69 @@ "$ref": "#/components/responses/429" } }, - "summary": "Get items on board", - "tags": ["items"] - } - }, - "/v2/boards/{board_id}/items/{item_id}": { - "get": { - "description": "Retrieves information for a specific item on a board.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-specific-item", + "summary": "Get boards", + "tags": ["boards"] + }, + "put": { + "description": "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
", + "operationId": "copy-board", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", - "in": "path", - "name": "board_id", + "description": "Unique identifier (ID) of the board that you want to copy.", + "in": "query", + "name": "copy_from", "required": true, "schema": { "type": "string" } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CopyBoardChanges" + } + } + } + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BoardWithLinksAndWithoutProject" + } + } + }, + "description": "Board copied" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" }, + "409": { + "$ref": "#/components/responses/409" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Copy board", + "tags": ["boards"] + } + }, + "/v2/boards/{board_id}": { + "get": { + "description": "Retrieves information about a board.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-specific-board", + "parameters": [ { - "description": "Unique identifier (ID) of the item that you want to retrieve.", + "description": "Unique identifier (ID) of the board that you want to retrieve.", "in": "path", - "name": "item_id", + "name": "board_id", "required": true, "schema": { "type": "string" @@ -3296,11 +3486,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GenericItem" + "$ref": "#/components/schemas/BoardWithLinksAndLastOpened" } } }, - "description": "Item retrieved" + "description": "Board retrieved" }, "400": { "$ref": "#/components/responses/400" @@ -3312,37 +3502,28 @@ "$ref": "#/components/responses/429" } }, - "summary": "Get specific item on board", - "tags": ["items"] + "summary": "Get specific board", + "tags": ["boards"] }, "patch": { - "description": "Updates the position or the parent of an item on a board.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "update-item-position-or-parent", + "description": "Updates a specific board.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "update-board", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to update the item.", + "description": "Unique identifier (ID) of the board that you want to update.", "in": "path", "name": "board_id", "required": true, "schema": { "type": "string" } - }, - { - "description": "Unique identifier (ID) of the item that you want to update.", - "in": "path", - "name": "item_id", - "required": true, - "schema": { - "type": "string" - } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GenericItemUpdate" + "$ref": "#/components/schemas/BoardChanges" } } }, @@ -3353,11 +3534,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GenericItem" + "$ref": "#/components/schemas/BoardWithLinks" } } }, - "description": "Item updated" + "description": "Board updated" + }, + "202": { + "description": "The board update operation has been accepted and will be processed asynchronously. If the operation exceeds the expected duration, a response will be returned.\nTo monitor the status of the board update, use the Get specific board API. This API allows you to verify whether the board has been successfully updated." }, "400": { "$ref": "#/components/responses/400" @@ -3365,34 +3549,28 @@ "404": { "$ref": "#/components/responses/404" }, + "409": { + "$ref": "#/components/responses/409" + }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Update item position or parent", - "tags": ["items"] + "summary": "Update board", + "tags": ["boards"] }, "delete": { - "description": "Deletes an item from a board.

Required scope

boards:write

Rate limiting

Level 3
", - "operationId": "delete-item", + "description": "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
", + "operationId": "delete-board", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to delete the item.", + "description": "Unique identifier (ID) of the board that you want to delete.", "in": "path", "name": "board_id", "required": true, "schema": { "type": "string" } - }, - { - "description": "Unique identifier (ID) of the item that you want to delete.", - "in": "path", - "name": "item_id", - "required": true, - "schema": { - "type": "string" - } } ], "responses": { @@ -3404,7 +3582,7 @@ } } }, - "description": "Item deleted" + "description": "Board deleted" }, "400": { "$ref": "#/components/responses/400" @@ -3412,21 +3590,24 @@ "404": { "$ref": "#/components/responses/404" }, + "409": { + "$ref": "#/components/responses/409" + }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Delete item", - "tags": ["items"] + "summary": "Delete board", + "tags": ["boards"] } }, - "/v2/boards/{board_id}/members": { + "/v2/boards/{board_id}/app_cards": { "post": { - "description": "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
", - "operationId": "share-board", + "description": "Adds an app card item to a board.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "create-app-card-item", "parameters": [ { - "description": "Unique identifier (ID) of the board to which the board member belongs.", + "description": "Unique identifier (ID) of the board where you want to create the item.", "in": "path", "name": "board_id", "required": true, @@ -3439,7 +3620,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardMembersInvite" + "$ref": "#/components/schemas/AppCardCreateRequest" } } }, @@ -3450,67 +3631,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InvitationResult" - } - } - }, - "description": "Board members invited" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "summary": "Share board", - "tags": ["board_members"] - }, - "get": { - "description": "Retrieves a pageable list of members for a board.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-board-members", - "parameters": [ - { - "in": "query", - "name": "limit", - "schema": { - "type": "string", - "description": "The maximum number of board members to retrieve.\nDefault: `20`.", - "maximum": 50, - "minimum": 1 - } - }, - { - "in": "query", - "name": "offset", - "schema": { - "type": "string", - "description": "The (zero-based) offset of the first item in the collection to return.\nDefault: `0`." - } - }, - { - "description": "Unique identifier (ID) of the board to which the board member belongs.", - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BoardMembersPagedResponse" + "$ref": "#/components/schemas/AppCardItem" } } }, - "description": "Board members retrieved" + "description": "App card item created" }, "400": { "$ref": "#/components/responses/400" @@ -3522,17 +3647,17 @@ "$ref": "#/components/responses/429" } }, - "summary": "Get all board members", - "tags": ["board_members"] + "summary": "Create app card item", + "tags": ["app_cards"] } }, - "/v2/boards/{board_id}/members/{board_member_id}": { + "/v2/boards/{board_id}/app_cards/{item_id}": { "get": { - "description": "Retrieves information for a board member.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-specific-board-member", + "description": "Retrieves information for a specific app card item on a board.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-app-card-item", "parameters": [ { - "description": "Unique identifier (ID) of the board to which the board member belongs.", + "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", "in": "path", "name": "board_id", "required": true, @@ -3541,9 +3666,9 @@ } }, { - "description": "Unique identifier (ID) of the board member whose role you want to retrieve.", + "description": "Unique identifier (ID) of the item that you want to retrieve.", "in": "path", - "name": "board_member_id", + "name": "item_id", "required": true, "schema": { "type": "string" @@ -3555,11 +3680,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardMemberWithLinks" + "$ref": "#/components/schemas/AppCardItem" } } }, - "description": "Board member retrieved" + "description": "App card item retrieved" }, "400": { "$ref": "#/components/responses/400" @@ -3571,15 +3696,15 @@ "$ref": "#/components/responses/429" } }, - "summary": "Get specific board member", - "tags": ["board_members"] + "summary": "Get app card item", + "tags": ["app_cards"] }, "patch": { - "description": "Updates the role of a board member.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "update-board-member", + "description": "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
", + "operationId": "update-app-card-item", "parameters": [ { - "description": "Unique identifier (ID) of the board for which you want to update the role of the board member.", + "description": "Unique identifier (ID) of the board where you want to update the item.", "in": "path", "name": "board_id", "required": true, @@ -3588,9 +3713,9 @@ } }, { - "description": "Unique identifier (ID) of the board member whose role you want to update.", + "description": "Unique identifier (ID) of the item that you want to update.", "in": "path", - "name": "board_member_id", + "name": "item_id", "required": true, "schema": { "type": "string" @@ -3601,7 +3726,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardMemberChanges" + "$ref": "#/components/schemas/AppCardUpdateRequest" } } }, @@ -3612,11 +3737,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardMemberWithLinks" + "$ref": "#/components/schemas/AppCardItem" } } }, - "description": "Board member updated" + "description": "Card item updated" }, "400": { "$ref": "#/components/responses/400" @@ -3624,16 +3749,19 @@ "404": { "$ref": "#/components/responses/404" }, + "409": { + "$ref": "#/components/responses/409" + }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Update board member", - "tags": ["board_members"] + "summary": "Update app card item", + "tags": ["app_cards"] }, "delete": { - "description": "Removes a board member from a board.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "remove-board-member", + "description": "Deletes an app card item from a board.

Required scope

boards:write

Rate limiting

Level 3
", + "operationId": "delete-app-card-item", "parameters": [ { "description": "Unique identifier (ID) of the board from which you want to delete an item.", @@ -3645,9 +3773,9 @@ } }, { - "description": "Unique identifier (ID) of the board member whose role you want to delete.", + "description": "Unique identifier (ID) of the item that you want to delete.", "in": "path", - "name": "board_member_id", + "name": "item_id", "required": true, "schema": { "type": "string" @@ -3663,7 +3791,7 @@ } } }, - "description": "Board member deleted" + "description": "App card item deleted" }, "400": { "$ref": "#/components/responses/400" @@ -3675,14 +3803,17 @@ "$ref": "#/components/responses/429" } }, - "summary": "Remove board member", - "tags": ["board_members"] + "summary": "Delete app card item", + "tags": ["app_cards"] } }, - "/v2/boards/{board_id}/shapes": { + "/v2/boards/{board_id}/cards": { "post": { - "description": "Adds a shape item to a board.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "create-shape-item", + "description": "Adds a card item to a board

Required scope

boards:write

Rate limiting

Level 2
", + "x-settings": { + "skip-tests": true + }, + "operationId": "create-card-item", "parameters": [ { "description": "Unique identifier (ID) of the board where you want to create the item.", @@ -3698,7 +3829,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShapeCreateRequest" + "$ref": "#/components/schemas/CardCreateRequest" } } }, @@ -3709,11 +3840,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShapeItem" + "$ref": "#/components/schemas/CardItem" } } }, - "description": "Shape item created" + "description": "Card item created" }, "400": { "$ref": "#/components/responses/400" @@ -3725,14 +3856,17 @@ "$ref": "#/components/responses/429" } }, - "summary": "Create shape item", - "tags": ["shapes"] + "summary": "Create card item", + "tags": ["cards"] } }, - "/v2/boards/{board_id}/shapes/{item_id}": { + "/v2/boards/{board_id}/cards/{item_id}": { "get": { - "description": "Retrieves information for a specific shape item on a board.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-shape-item", + "x-settings": { + "skip-tests": true + }, + "description": "Retrieves information for a specific card item on a board

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-card-item", "parameters": [ { "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", @@ -3758,11 +3892,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShapeItem" + "$ref": "#/components/schemas/CardItem" } } }, - "description": "Shape item retrieved" + "description": "Card item retrieved" }, "400": { "$ref": "#/components/responses/400" @@ -3774,12 +3908,15 @@ "$ref": "#/components/responses/429" } }, - "summary": "Get shape item", - "tags": ["shapes"] + "summary": "Get card item", + "tags": ["cards"] }, "patch": { - "description": "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
", - "operationId": "update-shape-item", + "x-settings": { + "skip-tests": true + }, + "description": "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
", + "operationId": "update-card-item", "parameters": [ { "description": "Unique identifier (ID) of the board where you want to update the item.", @@ -3804,7 +3941,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShapeUpdateRequest" + "$ref": "#/components/schemas/CardUpdateRequest" } } }, @@ -3815,11 +3952,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShapeItem" + "$ref": "#/components/schemas/CardItem" } } }, - "description": "Shape item updated" + "description": "Card item updated" }, "400": { "$ref": "#/components/responses/400" @@ -3834,12 +3971,15 @@ "$ref": "#/components/responses/429" } }, - "summary": "Update shape item", - "tags": ["shapes"] + "summary": "Update card item", + "tags": ["cards"] }, "delete": { - "description": "Deletes a shape item from the board.

Required scope

boards:write

Rate limiting

Level 3
", - "operationId": "delete-shape-item", + "x-settings": { + "skip-tests": true + }, + "description": "Deletes a card item from the board.

Required scope

boards:write

Rate limiting

Level 3
", + "operationId": "delete-card-item", "parameters": [ { "description": "Unique identifier (ID) of the board from which you want to delete the item.", @@ -3869,7 +4009,7 @@ } } }, - "description": "Shape item deleted" + "description": "Card item deleted" }, "400": { "$ref": "#/components/responses/400" @@ -3881,17 +4021,17 @@ "$ref": "#/components/responses/429" } }, - "summary": "Delete shape item", - "tags": ["shapes"] + "summary": "Delete card item", + "tags": ["cards"] } }, - "/v2/boards/{board_id}/sticky_notes": { + "/v2/boards/{board_id}/connectors": { "post": { - "description": "Adds a sticky note item to a board.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "create-sticky-note-item", + "description": "Adds a connector to a board.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "create-connector", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to create the item.", + "description": "Unique identifier (ID) of the board for which you want to create the connector.", "in": "path", "name": "board_id", "required": true, @@ -3904,22 +4044,22 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/StickyNoteCreateRequest" + "$ref": "#/components/schemas/ConnectorCreationData" } } }, "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/StickyNoteItem" + "$ref": "#/components/schemas/ConnectorWithLinks" } } }, - "description": "Sticky Note item created" + "description": "Connector created" }, "400": { "$ref": "#/components/responses/400" @@ -3931,17 +4071,74 @@ "$ref": "#/components/responses/429" } }, - "summary": "Create sticky note item", - "tags": ["sticky_notes"] + "summary": "Create connector", + "tags": ["connectors"] + }, + "get": { + "description": "Retrieves a list of connectors for a specific board.\n\nThis 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
", + "operationId": "get-connectors", + "parameters": [ + { + "in": "query", + "name": "limit", + "schema": { + "type": "string", + "default": "10", + "description": "The maximum number of results to return per call. If the number of connectors in the response is greater than the limit specified, the response returns the cursor parameter with a value.", + "maximum": 50, + "minimum": 10 + } + }, + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string", + "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": "Unique identifier (ID) of the board from which you want to retrieve a list of connectors.", + "in": "path", + "name": "board_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectorsCursorPaged" + } + } + }, + "description": "Connectors retrieved" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Get connectors", + "tags": ["connectors"] } }, - "/v2/boards/{board_id}/sticky_notes/{item_id}": { + "/v2/boards/{board_id}/connectors/{connector_id}": { "get": { - "description": "Retrieves information for a specific sticky note item on a board.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-sticky-note-item", + "description": "Retrieves information for a specific connector on a board.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-connector", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", + "description": "Unique identifier (ID) of the board from which you want to retrieve a specific connector.", "in": "path", "name": "board_id", "required": true, @@ -3950,9 +4147,9 @@ } }, { - "description": "Unique identifier (ID) of the item that you want to retrieve.", + "description": "Unique identifier (ID) of the connector that you want to retrieve.", "in": "path", - "name": "item_id", + "name": "connector_id", "required": true, "schema": { "type": "string" @@ -3964,11 +4161,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/StickyNoteItem" + "$ref": "#/components/schemas/ConnectorWithLinks" } } }, - "description": "Sticky Note item retrieved" + "description": "Connector retrieved" }, "400": { "$ref": "#/components/responses/400" @@ -3980,15 +4177,15 @@ "$ref": "#/components/responses/429" } }, - "summary": "Get sticky note item", - "tags": ["sticky_notes"] + "summary": "Get specific connector", + "tags": ["connectors"] }, "patch": { - "description": "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
", - "operationId": "update-sticky-note-item", + "description": "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
", + "operationId": "update-connector", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to update the item.", + "description": "Unique identifier (ID) of the board for which you want to update the connector.", "in": "path", "name": "board_id", "required": true, @@ -3997,9 +4194,9 @@ } }, { - "description": "Unique identifier (ID) of the item that you want to update.", + "description": "Unique identifier (ID) of the connector that you want to update.", "in": "path", - "name": "item_id", + "name": "connector_id", "required": true, "schema": { "type": "string" @@ -4010,7 +4207,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/StickyNoteUpdateRequest" + "$ref": "#/components/schemas/ConnectorChangesData" } } }, @@ -4021,11 +4218,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/StickyNoteItem" + "$ref": "#/components/schemas/ConnectorWithLinks" } } }, - "description": "Sticky Note item updated" + "description": "Connector updated" }, "400": { "$ref": "#/components/responses/400" @@ -4040,15 +4237,15 @@ "$ref": "#/components/responses/429" } }, - "summary": "Update sticky note item", - "tags": ["sticky_notes"] + "summary": "Update connector", + "tags": ["connectors"] }, "delete": { - "description": "Deletes a sticky note item from the board.

Required scope

boards:write

Rate limiting

Level 3
", - "operationId": "delete-sticky-note-item", + "description": "Deletes the specified connector from the board.

Required scope

boards:write

Rate limiting

Level 3
", + "operationId": "delete-connector", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to delete the item.", + "description": "Unique identifier (ID) of the board from which you want to delete the connector.", "in": "path", "name": "board_id", "required": true, @@ -4057,9 +4254,9 @@ } }, { - "description": "Unique identifier (ID) of the item that you want to delete.", + "description": "Unique identifier (ID) of the connector that you want to delete.", "in": "path", - "name": "item_id", + "name": "connector_id", "required": true, "schema": { "type": "string" @@ -4075,7 +4272,7 @@ } } }, - "description": "Sticky Note item deleted" + "description": "Connector deleted" }, "400": { "$ref": "#/components/responses/400" @@ -4087,14 +4284,14 @@ "$ref": "#/components/responses/429" } }, - "summary": "Delete sticky note item", - "tags": ["sticky_notes"] + "summary": "Delete connector", + "tags": ["connectors"] } }, - "/v2/boards/{board_id}/texts": { + "/v2/boards/{board_id}/documents": { "post": { - "description": "Adds a text item to a board.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "create-text-item", + "description": "Adds a document item to a board by specifying the URL where the document is hosted.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "create-document-item-using-url", "parameters": [ { "description": "Unique identifier (ID) of the board where you want to create the item.", @@ -4110,7 +4307,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TextCreateRequest" + "$ref": "#/components/schemas/DocumentCreateRequest" } } }, @@ -4121,11 +4318,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TextItem" + "$ref": "#/components/schemas/DocumentItem" } } }, - "description": "Text item created" + "description": "Document item created" }, "400": { "$ref": "#/components/responses/400" @@ -4137,14 +4334,14 @@ "$ref": "#/components/responses/429" } }, - "summary": "Create text item", - "tags": ["texts"] + "summary": "Create document item using URL", + "tags": ["documents"] } }, - "/v2/boards/{board_id}/texts/{item_id}": { + "/v2/boards/{board_id}/documents/{item_id}": { "get": { - "description": "Retrieves information for a specific text item on a board.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-text-item", + "description": "Retrieves information for a specific document item on a board

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-document-item", "parameters": [ { "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", @@ -4170,11 +4367,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TextItem" + "$ref": "#/components/schemas/DocumentItem" } } }, - "description": "Text item retrieved" + "description": "Document item retrieved" }, "400": { "$ref": "#/components/responses/400" @@ -4186,12 +4383,12 @@ "$ref": "#/components/responses/429" } }, - "summary": "Get text item", - "tags": ["texts"] + "summary": "Get document item", + "tags": ["documents"] }, "patch": { - "description": "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
", - "operationId": "update-text-item", + "description": "Updates a document item on a board

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "update-document-item-using-url", "parameters": [ { "description": "Unique identifier (ID) of the board where you want to update the item.", @@ -4216,7 +4413,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TextUpdateRequest" + "$ref": "#/components/schemas/DocumentUpdateRequest" } } }, @@ -4227,11 +4424,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TextItem" + "$ref": "#/components/schemas/DocumentItem" } } }, - "description": "Text item updated" + "description": "Document item updated" }, "400": { "$ref": "#/components/responses/400" @@ -4246,12 +4443,12 @@ "$ref": "#/components/responses/429" } }, - "summary": "Update text item", - "tags": ["texts"] + "summary": "Update document item using URL", + "tags": ["documents"] }, "delete": { - "description": "Deletes a text item from the board

Required scope

boards:write

Rate limiting

Level 3
", - "operationId": "delete-text-item", + "description": "Deletes a document item from the board.

Required scope

boards:write

Rate limiting

Level 3
", + "operationId": "delete-document-item", "parameters": [ { "description": "Unique identifier (ID) of the board from which you want to delete the item.", @@ -4281,7 +4478,7 @@ } } }, - "description": "Text item deleted" + "description": "Document item deleted" }, "400": { "$ref": "#/components/responses/400" @@ -4293,32 +4490,30 @@ "$ref": "#/components/responses/429" } }, - "summary": "Delete text item", - "tags": ["texts"] + "summary": "Delete document item", + "tags": ["documents"] } }, - "/v2/boards/{board_id}/items/bulk": { - "parameters": [ - { - "$ref": "#/components/parameters/boardId" - } - ], + "/v2/boards/{board_id}/embeds": { "post": { - "x-settings": { - "publish": true - }, - "description": "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\n

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.", - "operationId": "create-items", + "description": "Adds an embed item containing external content to a board.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "create-embed-item", + "parameters": [ + { + "description": "Unique identifier (ID) of the board where you want to create the item.", + "in": "path", + "name": "board_id", + "required": true, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ItemCreate" - }, - "minItems": 1, - "maxItems": 20 + "$ref": "#/components/schemas/EmbedCreateRequest" } } }, @@ -4326,197 +4521,143 @@ }, "responses": { "201": { - "description": "Items created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Items" + "$ref": "#/components/schemas/EmbedItem" } } - } + }, + "description": "Embed item created" }, "400": { - "description": "Malformed request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BulkOperationError" - } - } - } + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" }, "429": { - "description": "Too many requests", + "$ref": "#/components/responses/429" + } + }, + "summary": "Create embed item", + "tags": ["embeds"] + } + }, + "/v2/boards/{board_id}/embeds/{item_id}": { + "get": { + "description": "Retrieves information for a specific embed item on a board.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-embed-item", + "parameters": [ + { + "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", + "in": "path", + "name": "board_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Unique identifier (ID) of the item that you want to retrieve.", + "in": "path", + "name": "item_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/EmbedItem" } } - } + }, + "description": "Embed item retrieved" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" } }, - "summary": "Create items in bulk", - "tags": ["Bulk operations"] - } - }, - "/v2/boards/{board_id_Platformbulkcreateoperation}/items": { - "parameters": [ - { - "$ref": "#/components/parameters/boardId" - } - ] - }, - "/v2/boards/{board_id}/frames": { - "post": { - "description": "Adds a frame to a board.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "create-frame-item", + "summary": "Get embed item", + "tags": ["embeds"] + }, + "patch": { + "description": "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
", + "operationId": "update-embed-item", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to create a frame.", + "description": "Unique identifier (ID) of the board where you want to update the item.", "in": "path", "name": "board_id", "required": true, "schema": { "type": "string" } + }, + { + "description": "Unique identifier (ID) of the item that you want to update.", + "in": "path", + "name": "item_id", + "required": true, + "schema": { + "type": "string" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FrameCreateRequest" + "$ref": "#/components/schemas/EmbedUpdateRequest" } } }, "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FrameItem" + "$ref": "#/components/schemas/EmbedItem" } } }, - "description": "Frame created" + "description": "Embed item updated" }, "400": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Malformed request" + "$ref": "#/components/responses/400" }, "404": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Not found" + "$ref": "#/components/responses/404" + }, + "409": { + "$ref": "#/components/responses/409" }, "429": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Too many requests" + "$ref": "#/components/responses/429" } }, - "summary": "Create frame", - "tags": ["frames"] - } - }, - "/v2/boards/{board_id}/frames/{item_id}": { - "get": { - "description": "Retrieves information for a specific frame on a board.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-frame-item", + "summary": "Update embed item", + "tags": ["embeds"] + }, + "delete": { + "description": "Deletes an embed item from the board.

Required scope

boards:write

Rate limiting

Level 3
", + "operationId": "delete-embed-item", "parameters": [ { - "description": "Unique identifier (ID) of the board that contains the frame that you want to retrieve", + "description": "Unique identifier (ID) of the board from which you want to delete the item.", "in": "path", "name": "board_id", "required": true, @@ -4525,7 +4666,7 @@ } }, { - "description": "Unique identifier (ID) of the frame that you want to retrieve.", + "description": "Unique identifier (ID) of the item that you want to delete.", "in": "path", "name": "item_id", "required": true, @@ -4535,312 +4676,93 @@ } ], "responses": { - "200": { + "204": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FrameItem" + "type": "object" } } }, - "description": "Frame retrieved" + "description": "Embed item deleted" }, "400": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Malformed request" + "$ref": "#/components/responses/400" }, "404": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Not found" + "$ref": "#/components/responses/404" }, "429": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Too many requests" + "$ref": "#/components/responses/429" } }, - "summary": "Get frame", - "tags": ["frames"] - }, - "patch": { - "description": "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
", - "operationId": "update-frame-item", + "summary": "Delete embed item", + "tags": ["embeds"] + } + }, + "/v2/boards/{board_id}/images": { + "post": { + "x-settings": { + "skip-tests": true + }, + "description": "Adds an image item to a board by specifying an image URL.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "create-image-item-using-url", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to update the frame.", + "description": "Unique identifier (ID) of the board where you want to create the item.", "in": "path", "name": "board_id", "required": true, "schema": { "type": "string" } - }, - { - "description": "Unique identifier (ID) of the frame that you want to update.", - "in": "path", - "name": "item_id", - "required": true, - "schema": { - "type": "string" - } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FrameUpdateRequest" + "$ref": "#/components/schemas/ImageCreateRequest" } } }, "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FrameItem" + "$ref": "#/components/schemas/ImageItem" } } }, - "description": "Frame updated" + "description": "Image item created" }, "400": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Malformed request" + "$ref": "#/components/responses/400" }, "404": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Not found" - }, - "409": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 409 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Conflict" + "$ref": "#/components/responses/404" }, "429": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Too many requests" + "$ref": "#/components/responses/429" } }, - "summary": "Update frame", - "tags": ["frames"] - }, - "delete": { - "description": "Deletes a frame from a board.

Required scope

boards:write

Rate limiting

Level 3
", - "operationId": "delete-frame-item", + "summary": "Create image item using URL", + "tags": ["images"] + } + }, + "/v2/boards/{board_id}/images/{item_id}": { + "get": { + "x-settings": { + "skip-tests": true + }, + "description": "Retrieves information for a specific image item on a board.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-image-item", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to delete the frame.", + "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", "in": "path", "name": "board_id", "required": true, @@ -4849,7 +4771,7 @@ } }, { - "description": "Unique identifier (ID) of the frame that you want to delete.", + "description": "Unique identifier (ID) of the item that you want to retrieve.", "in": "path", "name": "item_id", "required": true, @@ -4859,147 +4781,148 @@ } ], "responses": { - "204": { + "200": { "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/ImageItem" } } }, - "description": "Frame deleted" + "description": "Image item retrieved" }, "400": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Malformed request" + "$ref": "#/components/responses/400" }, "404": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Not found" + "$ref": "#/components/responses/404" }, "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Get image item", + "tags": ["images"] + }, + "patch": { + "x-settings": { + "skip-tests": true + }, + "description": "Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "update-image-item-using-url", + "parameters": [ + { + "description": "Unique identifier (ID) of the board where you want to update the item.", + "in": "path", + "name": "board_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Unique identifier (ID) of the item that you want to update.", + "in": "path", + "name": "item_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImageUpdateRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { "content": { "application/json": { "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } + "$ref": "#/components/schemas/ImageItem" } } }, - "description": "Too many requests" + "description": "Image item updated" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "409": { + "$ref": "#/components/responses/409" + }, + "429": { + "$ref": "#/components/responses/429" } }, - "summary": "Delete frame", - "tags": ["frames"] - } - }, - "/v2/boards/{board_id_PlatformContainers}/items": { - "get": { - "description": "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
", - "operationId": "get-items-within-frame", + "summary": "Update image item using URL", + "tags": ["images"] + }, + "delete": { + "x-settings": { + "skip-tests": true + }, + "description": "Deletes an image item from the board.

Required scope

boards:write

Rate limiting

Level 3
", + "operationId": "delete-image-item", "parameters": [ { - "description": "Unique identifier (ID) of the board that contains the frame for which you want to retrieve the list of available items.", + "description": "Unique identifier (ID) of the board from which you want to delete the item.", "in": "path", - "name": "board_id_PlatformContainers", + "name": "board_id", "required": true, "schema": { "type": "string" } }, { - "description": "ID of the frame for which you want to retrieve the list of available items.", - "in": "query", - "name": "parent_item_id", + "description": "Unique identifier (ID) of the item that you want to delete.", + "in": "path", + "name": "item_id", "required": true, "schema": { - "type": "string", - "minimum": 0 + "type": "string" } + } + ], + "responses": { + "204": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Image item deleted" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Delete image item", + "tags": ["images"] + } + }, + "/v2/boards/{board_id}/items": { + "get": { + "description": "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.\n\nThis 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
", + "operationId": "get-items", + "parameters": [ { "in": "query", "name": "limit", @@ -5016,7 +4939,21 @@ "name": "type", "schema": { "type": "string", - "description": "If you want to get a list of items of a specific type, specify an item type. For example, if you want to retrieve the list of card items, set `type` to `cards`.\n Possible values: `app_card`, `card`, `document`, `embed`, `frame`, `image`, `shape`, `sticky_note`, `text`" + "enum": [ + "text", + "shape", + "sticky_note", + "image", + "document", + "card", + "app_card", + "preview", + "frame", + "embed", + "doc_format", + "data_table_format" + ], + "description": "If you want to get a list of items of a specific type, specify an item type. For example, if you want to retrieve the list of card items, set `type` to `cards`. A `document` is meant for uploaded documents like PDFs while `doc_format` is a Miro structured document similar to a Google Doc.\n Possible values: `app_card`, `card`, `data_table_format`, `document`, `embed`, `frame`, `image`, `shape`, `sticky_note`, `text`, `doc_format`" } }, { @@ -5026,6 +4963,15 @@ "type": "string", "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": "Unique identifier (ID) of the board for which you want to retrieve the list of available items.", + "in": "path", + "name": "board_id", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -5037,490 +4983,455 @@ } } }, - "description": "Items within frame retrieved" + "description": "Items retrieved" }, "400": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Malformed request" + "$ref": "#/components/responses/400" }, "404": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Not found" + "$ref": "#/components/responses/404" }, "429": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Too many requests" + "$ref": "#/components/responses/429" } }, - "summary": "Get items within frame", + "summary": "Get items on board", "tags": ["items"] } }, - "/v2/boards/{board_id_Platformcreateitemsinbulkusingfilefromdevice}/items/bulk": { - "parameters": [ - { - "$ref": "#/components/parameters/boardId" - } - ], - "post": { - "description": "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.\nTo try out this API in our documentation:\n1. In the **BODY PARAMS** section, select **ADD FILE**, and then upload a local file. Repeat for each item that you want to add.\n2. Upload a JSON file that contains the bulk data for the items you want to create.\n\n

Required scope

boards:write

Rate limiting

Level 2 per item
\n", - "operationId": "create-items-in-bulk-using-file-from-device", - "requestBody": { - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "format": "binary", - "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": { - "type": "array", - "description": "Array of items to create (PDFs, images, etc.). Maximum of 20 items.", - "items": { - "type": "string", - "format": "binary" - } - } - }, - "required": ["data", "resources"] - } + "/v2/boards/{board_id}/items/{item_id}": { + "get": { + "description": "Retrieves information for a specific item on a board.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-specific-item", + "parameters": [ + { + "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", + "in": "path", + "name": "board_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Unique identifier (ID) of the item that you want to retrieve.", + "in": "path", + "name": "item_id", + "required": true, + "schema": { + "type": "string" } } - }, + ], "responses": { - "201": { - "description": "Items created", + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Items" + "$ref": "#/components/schemas/GenericItem" } } - } + }, + "description": "Item retrieved" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" } }, - "summary": "Create items in bulk using file from device", - "tags": ["Bulk operations"] - } - }, - "/v2-experimental/apps/{app_id}/metrics": { - "get": { - "summary": "Get app metrics", - "description": "Returns a list of usage metrics for a specific app for a given time range, grouped by requested time period.\n\nThis endpoint requires an app management API token. It can be generated in the Your Apps section of Developer Hub.
\n

Required scope

boards:read
\n

Rate limiting

Level 1
\n", - "operationId": "get-metrics", - "tags": ["App metrics (experimental)"], + "summary": "Get specific item on board", + "tags": ["items"] + }, + "patch": { + "description": "Updates the position or the parent of an item on a board.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "update-item-position-or-parent", "parameters": [ { + "description": "Unique identifier (ID) of the board where you want to update the item.", "in": "path", - "name": "app_id", + "name": "board_id", "required": true, "schema": { "type": "string" - }, - "description": "ID of the app to get metrics for." + } }, { - "in": "query", - "name": "startDate", + "description": "Unique identifier (ID) of the item that you want to update.", + "in": "path", + "name": "item_id", "required": true, "schema": { - "type": "string", - "format": "date" + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GenericItemUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GenericItem" + } + } }, - "description": "Start date of the period in UTC format. For example, 2024-12-31." + "description": "Item updated" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Update item position or parent", + "tags": ["items"] + }, + "delete": { + "description": "Deletes an item from a board.

Required scope

boards:write

Rate limiting

Level 3
", + "operationId": "delete-item", + "parameters": [ { - "in": "query", - "name": "endDate", + "description": "Unique identifier (ID) of the board from which you want to delete the item.", + "in": "path", + "name": "board_id", "required": true, "schema": { - "type": "string", - "format": "date" - }, - "description": "End date of the period in UTC format. For example, 2024-12-31." + "type": "string" + } }, { - "in": "query", - "name": "period", + "description": "Unique identifier (ID) of the item that you want to delete.", + "in": "path", + "name": "item_id", + "required": true, "schema": { - "type": "string", - "enum": ["DAY", "WEEK", "MONTH"], - "default": "WEEK" - }, - "description": "Group data by this time period." + "type": "string" + } } ], "responses": { - "200": { - "description": "Successful response", + "204": { "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "periodStart": { - "type": "string", - "description": "Date from which the metrics are aggregated.", - "format": "date" - }, - "uniqueUsers": { - "type": "integer", - "description": "Number of unique users who performed at least one activity in the application." - }, - "uniqueRecurringUsers": { - "type": "integer", - "description": "Number of unique users who have been active for more than one day over the past 30 days." - }, - "uniqueOrganizations": { - "type": "integer", - "description": "Number of unique company accounts that have installed the application." - }, - "installations": { - "type": "integer", - "description": "Number of application installations for a team." - }, - "uninstallations": { - "type": "integer", - "description": "Number of application uninstallations for a team." - } - } - } + "type": "object" } } - } + }, + "description": "Item deleted" + }, + "400": { + "$ref": "#/components/responses/400" }, "404": { - "description": "App not found response", + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Delete item", + "tags": ["items"] + } + }, + "/v2/boards/{board_id}/members": { + "post": { + "x-settings": { + "skip-tests": true + }, + "description": "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
", + "operationId": "share-board", + "parameters": [ + { + "description": "Unique identifier (ID) of the board to which the board member belongs.", + "in": "path", + "name": "board_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BoardMembersInvite" + } + } + }, + "required": true + }, + "responses": { + "201": { "content": { "application/json": { "schema": { - "type": "object", - "description": "App not found response", - "properties": { - "message": { - "type": "string" - }, - "status": { - "type": "integer" - } - } + "$ref": "#/components/schemas/InvitationResult" } } - } + }, + "description": "Board members invited" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" } - } - } - }, - "/v2-experimental/apps/{app_id}/metrics-total": { + }, + "summary": "Share board", + "tags": ["board_members"] + }, "get": { - "summary": "Get total app metrics", - "description": "Returns total usage metrics for a specific app since the app was created.\n\nThis endpoint requires an app management API token. It can be generated in your apps section of Developer Hub.
\n

Required scope

boards:read
\n

Rate limiting

Level 1
\n", - "operationId": "get-metrics-total", - "tags": ["App metrics (experimental)"], + "description": "Retrieves a pageable list of members for a board.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-board-members", "parameters": [ { + "in": "query", + "name": "limit", + "schema": { + "type": "string", + "description": "The maximum number of board members to retrieve.\nDefault: `20`.", + "maximum": 50, + "minimum": 1 + } + }, + { + "in": "query", + "name": "offset", + "schema": { + "type": "string", + "description": "The (zero-based) offset of the first item in the collection to return.\nDefault: `0`." + } + }, + { + "description": "Unique identifier (ID) of the board to which the board member belongs.", "in": "path", - "name": "app_id", + "name": "board_id", "required": true, "schema": { "type": "string" - }, - "description": "ID of the app to get total metrics for." + } } ], "responses": { "200": { - "description": "Successful response", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "uniqueUsers": { - "type": "integer", - "description": "Number of unique users who performed at least one activity in the application." - }, - "uniqueRecurringUsers": { - "type": "integer", - "description": "Number of unique users who have been active for more than one day over the past 30 days." - }, - "uniqueOrganizations": { - "type": "integer", - "description": "Number of unique company accounts that have installed the application." - }, - "installations": { - "type": "integer", - "description": "Number of application installations for a team." - }, - "uninstallations": { - "type": "integer", - "description": "Number of application uninstallations for a team." - } - } + "$ref": "#/components/schemas/BoardMembersPagedResponse" } } - } + }, + "description": "Board members retrieved" + }, + "400": { + "$ref": "#/components/responses/400" }, "404": { - "description": "App not found response", + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Get all board members", + "tags": ["board_members"] + } + }, + "/v2/boards/{board_id}/members/{board_member_id}": { + "get": { + "x-settings": { + "skip-tests": true + }, + "description": "Retrieves information for a board member.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-specific-board-member", + "parameters": [ + { + "description": "Unique identifier (ID) of the board to which the board member belongs.", + "in": "path", + "name": "board_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Unique identifier (ID) of the board member whose role you want to retrieve.", + "in": "path", + "name": "board_member_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { "content": { "application/json": { "schema": { - "type": "object", - "description": "App not found response", - "properties": { - "message": { - "type": "string", - "description": "Description of the error." - }, - "status": { - "type": "integer", - "description": "HTTP status code." - } - } + "$ref": "#/components/schemas/BoardMemberWithLinks" } } + }, + "description": "Board member retrieved" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Get specific board member", + "tags": ["board_members"] + }, + "patch": { + "x-settings": { + "skip-tests": true + }, + "description": "Updates the role of a board member.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "update-board-member", + "parameters": [ + { + "description": "Unique identifier (ID) of the board for which you want to update the role of the board member.", + "in": "path", + "name": "board_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Unique identifier (ID) of the board member whose role you want to update.", + "in": "path", + "name": "board_member_id", + "required": true, + "schema": { + "type": "string" } } - } - } - }, - "/v2-experimental/webhooks/board_subscriptions": { - "post": { - "description": "Creates a webhook subscription to receive notifications when an item on a board is updated. Subscriptions are created per user, per board. You can create multiple subscriptions. We currently support all board items except tags, connectors, and comments.

Required scope

boards:read

Rate limiting

Level 2
", - "operationId": "create-board-subscription", + ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateBoardSubscriptionRequest" + "$ref": "#/components/schemas/BoardMemberChanges" } } }, "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardSubscription" + "$ref": "#/components/schemas/BoardMemberWithLinks" } } }, - "description": "Subscription created" + "description": "Board member updated" }, "400": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Malformed request" + "$ref": "#/components/responses/400" }, "404": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Not found" + "$ref": "#/components/responses/404" }, "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Update board member", + "tags": ["board_members"] + }, + "delete": { + "x-settings": { + "skip-tests": true + }, + "description": "Removes a board member from a board.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "remove-board-member", + "parameters": [ + { + "description": "Unique identifier (ID) of the board from which you want to delete an item.", + "in": "path", + "name": "board_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Unique identifier (ID) of the board member whose role you want to delete.", + "in": "path", + "name": "board_member_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { "content": { "application/json": { "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } + "type": "object" } } }, - "description": "Too many requests" + "description": "Board member deleted" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" } }, - "summary": "Create webhook subscription", - "tags": ["Webhooks (experimental)"] + "summary": "Remove board member", + "tags": ["board_members"] } }, - "/v2-experimental/webhooks/board_subscriptions/{subscription_id}": { - "patch": { - "description": "Updates the status or the callback URL of an existing webhook subscription.

Required scope

boards:read

Rate limiting

Level 2
", - "operationId": "update-board-subscription", + "/v2/boards/{board_id}/shapes": { + "post": { + "description": "Adds a shape item to a board.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "create-shape-item", "parameters": [ { + "description": "Unique identifier (ID) of the board where you want to create the item.", "in": "path", - "name": "subscription_id", + "name": "board_id", "required": true, "schema": { "type": "string" @@ -5531,154 +5442,58 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateBoardSubscriptionRequest" + "$ref": "#/components/schemas/ShapeCreateRequest" } } }, "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardSubscription" + "$ref": "#/components/schemas/ShapeItem" } } }, - "description": "Subscription updated" + "description": "Shape item created" }, "400": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Malformed request" + "$ref": "#/components/responses/400" }, "404": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Not found" + "$ref": "#/components/responses/404" }, "429": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Too many requests" + "$ref": "#/components/responses/429" } }, - "summary": "Update webhook subscription", - "tags": ["Webhooks (experimental)"] + "summary": "Create shape item", + "tags": ["shapes"] } }, - "/v2-experimental/webhooks/subscriptions": { + "/v2/boards/{board_id}/shapes/{item_id}": { "get": { - "description": "Retrieves information about all webhook subscriptions for a specific user.

Required scope

boards:read

Rate limiting

Level 4
", - "operationId": "get-user-subscriptions", + "description": "Retrieves information for a specific shape item on a board.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-shape-item", "parameters": [ { - "in": "query", - "name": "limit", - "required": false, + "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", + "in": "path", + "name": "board_id", + "required": true, "schema": { - "type": "string", - "default": "10", - "description": "The maximum number of results to return per call. If the number of webhook subscriptions in the response is greater than the limit specified, the response returns the cursor parameter with a value.", - "maximum": 100, - "minimum": 1 + "type": "string" } }, { - "in": "query", - "name": "cursor", - "required": false, + "description": "Unique identifier (ID) of the item that you want to retrieve.", + "in": "path", + "name": "item_id", + "required": true, "schema": { - "type": "string", - "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." + "type": "string" } } ], @@ -5687,132 +5502,205 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GenericSubscriptionsCursorPaged" + "$ref": "#/components/schemas/ShapeItem" } } }, - "description": "Subscriptions retrieved" + "description": "Shape item retrieved" }, "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Get shape item", + "tags": ["shapes"] + }, + "patch": { + "description": "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
", + "operationId": "update-shape-item", + "parameters": [ + { + "description": "Unique identifier (ID) of the board where you want to update the item.", + "in": "path", + "name": "board_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Unique identifier (ID) of the item that you want to update.", + "in": "path", + "name": "item_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShapeUpdateRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { "content": { "application/json": { "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } + "$ref": "#/components/schemas/ShapeItem" } } }, - "description": "Malformed request" + "description": "Shape item updated" + }, + "400": { + "$ref": "#/components/responses/400" }, "404": { + "$ref": "#/components/responses/404" + }, + "409": { + "$ref": "#/components/responses/409" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Update shape item", + "tags": ["shapes"] + }, + "delete": { + "description": "Deletes a shape item from the board.

Required scope

boards:write

Rate limiting

Level 3
", + "operationId": "delete-shape-item", + "parameters": [ + { + "description": "Unique identifier (ID) of the board from which you want to delete the item.", + "in": "path", + "name": "board_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Unique identifier (ID) of the item that you want to delete.", + "in": "path", + "name": "item_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { "content": { "application/json": { "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } + "type": "object" } } }, - "description": "Not found" + "description": "Shape item deleted" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" }, "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Delete shape item", + "tags": ["shapes"] + } + }, + "/v2/boards/{board_id}/sticky_notes": { + "post": { + "description": "Adds a sticky note item to a board.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "create-sticky-note-item", + "parameters": [ + { + "description": "Unique identifier (ID) of the board where you want to create the item.", + "in": "path", + "name": "board_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StickyNoteCreateRequest" + } + } + }, + "required": true + }, + "responses": { + "201": { "content": { "application/json": { "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } + "$ref": "#/components/schemas/StickyNoteItem" } } }, - "description": "Too many requests" + "description": "Sticky Note item created" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" } }, - "summary": "Get webhook subscriptions", - "tags": ["Webhooks (experimental)"] + "summary": "Create sticky note item", + "tags": ["sticky_notes"] } }, - "/v2-experimental/webhooks/subscriptions/{subscription_id}": { + "/v2/boards/{board_id}/sticky_notes/{item_id}": { "get": { - "description": "Retrieves information for a specific webhook subscription.

Required scope

boards:read

Rate limiting

Level 2
", - "operationId": "get-subscription-by-id", + "description": "Retrieves information for a specific sticky note item on a board.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-sticky-note-item", "parameters": [ { + "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", "in": "path", - "name": "subscription_id", + "name": "board_id", "required": true, "schema": { "type": "string" - }, - "description": "Unique identifier (ID) of the subscription that you want to retrieve" + } + }, + { + "description": "Unique identifier (ID) of the item that you want to retrieve.", + "in": "path", + "name": "item_id", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -5820,130 +5708,106 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GenericSubscription" + "$ref": "#/components/schemas/StickyNoteItem" } } }, - "description": "Subscription retrieved" + "description": "Sticky Note item retrieved" }, "400": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Malformed request" + "$ref": "#/components/responses/400" }, "404": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Not found" + "$ref": "#/components/responses/404" }, "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Get sticky note item", + "tags": ["sticky_notes"] + }, + "patch": { + "description": "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
", + "operationId": "update-sticky-note-item", + "parameters": [ + { + "description": "Unique identifier (ID) of the board where you want to update the item.", + "in": "path", + "name": "board_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Unique identifier (ID) of the item that you want to update.", + "in": "path", + "name": "item_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StickyNoteUpdateRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { "content": { "application/json": { "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } + "$ref": "#/components/schemas/StickyNoteItem" } } }, - "description": "Too many requests" + "description": "Sticky Note item updated" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "409": { + "$ref": "#/components/responses/409" + }, + "429": { + "$ref": "#/components/responses/429" } }, - "summary": "Get specific webhook subscription", - "tags": ["Webhooks (experimental)"] + "summary": "Update sticky note item", + "tags": ["sticky_notes"] }, "delete": { - "description": "Deletes the specified webhook subscription.

Required scope

boards:read

Rate limiting

Level 2
", - "operationId": "delete-subscription-by-id", + "description": "Deletes a sticky note item from the board.

Required scope

boards:write

Rate limiting

Level 3
", + "operationId": "delete-sticky-note-item", "parameters": [ { + "description": "Unique identifier (ID) of the board from which you want to delete the item.", + "in": "path", + "name": "board_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Unique identifier (ID) of the item that you want to delete.", "in": "path", - "name": "subscription_id", + "name": "item_id", "required": true, "schema": { "type": "string" - }, - "description": "Unique identifier (ID) of the subscription that you want to delete" + } } ], "responses": { @@ -5955,160 +5819,186 @@ } } }, - "description": "Subscription deleted" + "description": "Sticky Note item deleted" }, "400": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Malformed request" + "$ref": "#/components/responses/400" }, "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Delete sticky note item", + "tags": ["sticky_notes"] + } + }, + "/v2/boards/{board_id}/texts": { + "post": { + "description": "Adds a text item to a board.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "create-text-item", + "parameters": [ + { + "description": "Unique identifier (ID) of the board where you want to create the item.", + "in": "path", + "name": "board_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TextCreateRequest" + } + } + }, + "required": true + }, + "responses": { + "201": { "content": { "application/json": { "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } + "$ref": "#/components/schemas/TextItem" } } }, - "description": "Not found" + "description": "Text item created" }, - "429": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } - } - }, - "description": "Too many requests" + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" } }, - "summary": "Delete webhook subscription", - "tags": ["Webhooks (experimental)"] + "summary": "Create text item", + "tags": ["texts"] } }, - "/v2-experimental/boards/{board_id}/mindmap_nodes/{item_id}": { + "/v2/boards/{board_id}/texts/{item_id}": { "get": { - "description": "Retrieves information for a specific mind map node on a board.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-mindmap-node-experimental", + "description": "Retrieves information for a specific text item on a board.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-text-item", "parameters": [ { + "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", + "in": "path", + "name": "board_id", + "required": true, "schema": { "type": "string" - }, - "name": "board_id", + } + }, + { + "description": "Unique identifier (ID) of the item that you want to retrieve.", "in": "path", + "name": "item_id", "required": true, - "description": "Unique identifier (ID) of the board from which you want to retrieve a mind map node." + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TextItem" + } + } + }, + "description": "Text item retrieved" }, + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Get text item", + "tags": ["texts"] + }, + "patch": { + "description": "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
", + "operationId": "update-text-item", + "parameters": [ { + "description": "Unique identifier (ID) of the board where you want to update the item.", + "in": "path", + "name": "board_id", + "required": true, "schema": { "type": "string" - }, - "name": "item_id", + } + }, + { + "description": "Unique identifier (ID) of the item that you want to update.", "in": "path", + "name": "item_id", "required": true, - "description": "Unique identifier (ID) of the mind map node that you want to retrieve." + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TextUpdateRequest" + } + } + }, + "required": true + }, "responses": { "200": { - "description": "Mind map node retrieved", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MindmapItem" + "$ref": "#/components/schemas/TextItem" } } - } + }, + "description": "Text item updated" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "409": { + "$ref": "#/components/responses/409" + }, + "429": { + "$ref": "#/components/responses/429" } }, - "summary": "Get specific mind map node", - "tags": ["Mind map nodes (experimental)"] + "summary": "Update text item", + "tags": ["texts"] }, "delete": { - "description": "Deletes a mind map node item and its child nodes from the board.

Required scope

boards:write

Rate limiting

Level 3
", - "operationId": "delete-mindmap-node-experimental", + "description": "Deletes a text item from the board

Required scope

boards:write

Rate limiting

Level 3
", + "operationId": "delete-text-item", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to delete the mind map node.", + "description": "Unique identifier (ID) of the board from which you want to delete the item.", "in": "path", "name": "board_id", "required": true, @@ -6117,7 +6007,7 @@ } }, { - "description": "Unique identifier (ID) of the mind map node that you want to delete.", + "description": "Unique identifier (ID) of the item that you want to delete.", "in": "path", "name": "item_id", "required": true, @@ -6135,169 +6025,99 @@ } } }, - "description": "Mind map node deleted" + "description": "Text item deleted" }, "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Delete text item", + "tags": ["texts"] + } + }, + "/v2/boards/{board_id}/items/bulk": { + "parameters": [ + { + "$ref": "#/components/parameters/boardId" + } + ], + "post": { + "x-settings": { + "publish": true + }, + "description": "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\n

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.", + "operationId": "create-items", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ItemCreate" + }, + "minItems": 1, + "maxItems": 20 + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Items created", "content": { "application/json": { "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } + "$ref": "#/components/schemas/Items" } } - }, - "description": "Malformed request" + } }, - "404": { + "400": { + "description": "Malformed request", "content": { "application/json": { "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } + "$ref": "#/components/schemas/BulkOperationError" } } - }, - "description": "Not found" + } }, "429": { + "description": "Too many requests", "content": { "application/json": { "schema": { - "type": "object", - "description": "Test error obj", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } + "$ref": "#/components/schemas/Error" } } - }, - "description": "Too many requests" + } } }, - "summary": "Delete mind map node", - "tags": ["Mind map nodes (experimental)"] + "summary": "Create items in bulk", + "tags": ["Bulk operations"] } }, - "/v2-experimental/boards/{board_id}/mindmap_nodes": { + "/v2/boards/{board_id_Platformbulkcreateoperation}/items": { "parameters": [ { - "schema": { - "type": "string" - }, - "name": "board_id", - "in": "path", - "required": true, - "description": "Unique identifier (ID) of the board from which you want to retrieve mind map nodes." + "$ref": "#/components/parameters/boardId" } - ], - "get": { - "summary": "Get mind map nodes", - "tags": ["Mind map nodes (experimental)"], - "responses": { - "200": { - "description": "Mind map nodes retrieved", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MindmapCursorPaged" - } - } - } - } - }, - "operationId": "get-mindmap-nodes-experimental", - "description": "Retrieves a list of mind map nodes for a specific board.\n\nThis 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
", - "parameters": [ - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "limit", - "description": "Maximum number of results returned" - }, - { - "schema": { - "type": "string" - }, - "in": "query", - "name": "cursor", - "description": "Points to the next portion of the results set" - } - ] - }, + ] + }, + "/v2/boards/{board_id}/frames": { "post": { - "description": "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.", - "operationId": "create-mindmap-nodes-experimental", + "description": "Adds a frame to a board.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "create-frame-item", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to create the item.", + "description": "Unique identifier (ID) of the board where you want to create a frame.", "in": "path", "name": "board_id", "required": true, @@ -6310,7 +6130,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MindmapCreateRequest" + "$ref": "#/components/schemas/FrameCreateRequest" } } }, @@ -6321,11 +6141,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MindmapItem" + "$ref": "#/components/schemas/FrameItem" } } }, - "description": "Mind map node created" + "description": "Frame created" }, "400": { "content": { @@ -6430,46 +6250,28 @@ "description": "Too many requests" } }, - "summary": "Create mind map node", - "tags": ["Mind map nodes (experimental)"] + "summary": "Create frame", + "tags": ["frames"] } }, - "/v2-experimental/boards/{board_id}/items": { + "/v2/boards/{board_id}/frames/{item_id}": { "get": { - "description": "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.\n\nThis 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
", - "operationId": "get-items-experimental", + "description": "Retrieves information for a specific frame on a board.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-frame-item", "parameters": [ { - "in": "query", - "name": "limit", - "schema": { - "type": "string", - "default": "10", - "description": "The maximum number of results to return per call. If the number of items in the response is greater than the limit specified, the response returns the cursor parameter with a value.", - "maximum": 50, - "minimum": 10 - } - }, - { - "in": "query", - "name": "type", - "schema": { - "type": "string", - "enum": ["shape"] - } - }, - { - "in": "query", - "name": "cursor", + "description": "Unique identifier (ID) of the board that contains the frame that you want to retrieve", + "in": "path", + "name": "board_id", + "required": true, "schema": { - "type": "string", - "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." + "type": "string" } }, { - "description": "Unique identifier (ID) of the board for which you want to retrieve the list of available items.", + "description": "Unique identifier (ID) of the frame that you want to retrieve.", "in": "path", - "name": "board_id", + "name": "item_id", "required": true, "schema": { "type": "string" @@ -6481,11 +6283,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GenericItemCursorPaged" + "$ref": "#/components/schemas/FrameItem" } } }, - "description": "Items retrieved" + "description": "Frame retrieved" }, "400": { "content": { @@ -6590,17 +6392,15 @@ "description": "Too many requests" } }, - "summary": "Get items on board", - "tags": ["Flowchart shapes (experimental)"] - } - }, - "/v2-experimental/boards/{board_id}/items/{item_id}": { - "get": { - "description": "Retrieves information for a specific item on a board.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-specific-item-experimental", + "summary": "Get frame", + "tags": ["frames"] + }, + "patch": { + "description": "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
", + "operationId": "update-frame-item", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", + "description": "Unique identifier (ID) of the board where you want to update the frame.", "in": "path", "name": "board_id", "required": true, @@ -6609,7 +6409,7 @@ } }, { - "description": "Unique identifier (ID) of the item that you want to retrieve.", + "description": "Unique identifier (ID) of the frame that you want to update.", "in": "path", "name": "item_id", "required": true, @@ -6618,16 +6418,26 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FrameUpdateRequest" + } + } + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GenericItem" + "$ref": "#/components/schemas/FrameItem" } } }, - "description": "Item retrieved" + "description": "Frame updated" }, "400": { "content": { @@ -6697,6 +6507,40 @@ }, "description": "Not found" }, + "409": { + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Test error obj", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 409 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } + } + } + }, + "description": "Conflict" + }, "429": { "content": { "application/json": { @@ -6732,15 +6576,15 @@ "description": "Too many requests" } }, - "summary": "Get specific item on board", - "tags": ["Flowchart shapes (experimental)"] + "summary": "Update frame", + "tags": ["frames"] }, "delete": { - "description": "Deletes an item from a board.

Required scope

boards:write

Rate limiting

Level 3
", - "operationId": "delete-item-experimental", + "description": "Deletes a frame from a board.

Required scope

boards:write

Rate limiting

Level 3
", + "operationId": "delete-frame-item", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to delete the item.", + "description": "Unique identifier (ID) of the board from which you want to delete the frame.", "in": "path", "name": "board_id", "required": true, @@ -6749,7 +6593,7 @@ } }, { - "description": "Unique identifier (ID) of the item that you want to delete.", + "description": "Unique identifier (ID) of the frame that you want to delete.", "in": "path", "name": "item_id", "required": true, @@ -6767,7 +6611,7 @@ } } }, - "description": "Item deleted" + "description": "Frame deleted" }, "400": { "content": { @@ -6872,45 +6716,72 @@ "description": "Too many requests" } }, - "summary": "Delete item", - "tags": ["items"] + "summary": "Delete frame", + "tags": ["frames"] } }, - "/v2-experimental/boards/{board_id}/shapes": { - "post": { - "description": "Adds a flowchart shape item to a board.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "create-shape-item-flowchart", + "/v2/boards/{board_id_PlatformContainers}/items": { + "get": { + "description": "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
", + "operationId": "get-items-within-frame", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to create the item.", + "description": "Unique identifier (ID) of the board that contains the frame for which you want to retrieve the list of available items.", "in": "path", - "name": "board_id", + "name": "board_id_PlatformContainers", "required": true, "schema": { "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShapeCreateRequest" - } + }, + { + "description": "ID of the frame for which you want to retrieve the list of available items.", + "in": "query", + "name": "parent_item_id", + "required": true, + "schema": { + "type": "string", + "minimum": 0 } }, - "required": true - }, - "responses": { - "201": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShapeItem" - } - } - }, - "description": "Shape item created" + { + "in": "query", + "name": "limit", + "schema": { + "type": "string", + "default": "10", + "description": "The maximum number of results to return per call. If the number of items in the response is greater than the limit specified, the response returns the cursor parameter with a value.", + "maximum": 50, + "minimum": 10 + } + }, + { + "in": "query", + "name": "type", + "schema": { + "type": "string", + "description": "If you want to get a list of items of a specific type, specify an item type. For example, if you want to retrieve the list of card items, set `type` to `cards`.\n Possible values: `app_card`, `card`, `document`, `embed`, `frame`, `image`, `shape`, `sticky_note`, `text`" + } + }, + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string", + "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." + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GenericItemCursorPaged" + } + } + }, + "description": "Items within frame retrieved" }, "400": { "content": { @@ -7015,157 +6886,290 @@ "description": "Too many requests" } }, - "summary": "Create shape item", - "tags": ["Flowchart shapes (experimental)"] + "summary": "Get items within frame", + "tags": ["items"] } }, - "/v2-experimental/boards/{board_id}/shapes/{item_id}": { + "/v2/boards/{board_id_Platformcreateitemsinbulkusingfilefromdevice}/items/bulk": { + "parameters": [ + { + "$ref": "#/components/parameters/boardId" + } + ], + "post": { + "description": "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.\nTo try out this API in our documentation:\n1. In the **BODY PARAMS** section, select **ADD FILE**, and then upload a local file. Repeat for each item that you want to add.\n2. Upload a JSON file that contains the bulk data for the items you want to create.\n\n

Required scope

boards:write

Rate limiting

Level 2 per item
\n", + "operationId": "create-items-in-bulk-using-file-from-device", + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "string", + "format": "binary", + "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": { + "type": "array", + "description": "Array of items to create (PDFs, images, etc.). Maximum of 20 items.", + "items": { + "type": "string", + "format": "binary" + } + } + }, + "required": ["data", "resources"] + } + } + } + }, + "responses": { + "201": { + "description": "Items created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Items" + } + } + } + } + }, + "summary": "Create items in bulk using file from device", + "tags": ["Bulk operations"] + } + }, + "/v2-experimental/apps/{app_id}/metrics": { "get": { - "description": "Retrieves information for a specific shape item on a board.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-shape-item-flowchart", + "summary": "Get app metrics", + "description": "Returns a list of usage metrics for a specific app for a given time range, grouped by requested time period.\n\nThis endpoint requires an app management API token. It can be generated in the Your Apps section of Developer Hub.
\n

Required scope

boards:read
\n

Rate limiting

Level 1
\n", + "operationId": "get-metrics", + "tags": ["App metrics (experimental)"], "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", "in": "path", - "name": "board_id", + "name": "app_id", "required": true, "schema": { "type": "string" - } + }, + "description": "ID of the app to get metrics for." }, { - "description": "Unique identifier (ID) of the item that you want to retrieve.", - "in": "path", - "name": "item_id", + "in": "query", + "name": "startDate", "required": true, "schema": { - "type": "string" - } + "type": "string", + "format": "date" + }, + "description": "Start date of the period in UTC format. For example, 2024-12-31." + }, + { + "in": "query", + "name": "endDate", + "required": true, + "schema": { + "type": "string", + "format": "date" + }, + "description": "End date of the period in UTC format. For example, 2024-12-31." + }, + { + "in": "query", + "name": "period", + "schema": { + "type": "string", + "enum": ["DAY", "WEEK", "MONTH"], + "default": "WEEK" + }, + "description": "Group data by this time period." } ], "responses": { "200": { + "description": "Successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShapeItem" + "type": "array", + "items": { + "type": "object", + "properties": { + "periodStart": { + "type": "string", + "description": "Date from which the metrics are aggregated.", + "format": "date" + }, + "uniqueUsers": { + "type": "integer", + "description": "Number of unique users who performed at least one activity in the application." + }, + "uniqueRecurringUsers": { + "type": "integer", + "description": "Number of unique users who have been active for more than one day over the past 30 days." + }, + "uniqueOrganizations": { + "type": "integer", + "description": "Number of unique company accounts that have installed the application." + }, + "installations": { + "type": "integer", + "description": "Number of application installations for a team." + }, + "uninstallations": { + "type": "integer", + "description": "Number of application uninstallations for a team." + } + } + } } } - }, - "description": "Shape item retrieved" + } }, - "400": { + "404": { + "description": "App not found response", "content": { "application/json": { "schema": { "type": "object", - "description": "Test error obj", + "description": "App not found response", "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" + "type": "string" }, "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" + "type": "integer" } } } } + } + } + } + } + }, + "/v2-experimental/apps/{app_id}/metrics-total": { + "get": { + "summary": "Get total app metrics", + "description": "Returns total usage metrics for a specific app since the app was created.\n\nThis endpoint requires an app management API token. It can be generated in your apps section of Developer Hub.
\n

Required scope

boards:read
\n

Rate limiting

Level 1
\n", + "operationId": "get-metrics-total", + "tags": ["App metrics (experimental)"], + "parameters": [ + { + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "type": "string" }, - "description": "Malformed request" - }, - "404": { + "description": "ID of the app to get total metrics for." + } + ], + "responses": { + "200": { + "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", - "description": "Test error obj", "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" + "uniqueUsers": { + "type": "integer", + "description": "Number of unique users who performed at least one activity in the application." }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" + "uniqueRecurringUsers": { + "type": "integer", + "description": "Number of unique users who have been active for more than one day over the past 30 days." }, - "status": { + "uniqueOrganizations": { "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 + "description": "Number of unique company accounts that have installed the application." }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" + "installations": { + "type": "integer", + "description": "Number of application installations for a team." + }, + "uninstallations": { + "type": "integer", + "description": "Number of application uninstallations for a team." } } } } - }, - "description": "Not found" + } }, - "429": { + "404": { + "description": "App not found response", "content": { "application/json": { "schema": { "type": "object", - "description": "Test error obj", + "description": "App not found response", "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, "message": { "type": "string", - "description": "Description of the error", - "example": "Error message" + "description": "Description of the error." }, "status": { "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" + "description": "HTTP status code." } } } } + } + } + } + } + }, + "/v2-experimental/boards/{board_id}/mindmap_nodes/{item_id}": { + "get": { + "description": "Retrieves information for a specific mind map node on a board.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-mindmap-node-experimental", + "parameters": [ + { + "schema": { + "type": "string" }, - "description": "Too many requests" + "name": "board_id", + "in": "path", + "required": true, + "description": "Unique identifier (ID) of the board from which you want to retrieve a mind map node." + }, + { + "schema": { + "type": "string" + }, + "name": "item_id", + "in": "path", + "required": true, + "description": "Unique identifier (ID) of the mind map node that you want to retrieve." + } + ], + "responses": { + "200": { + "description": "Mind map node retrieved", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MindmapItem" + } + } + } } }, - "summary": "Get shape item", - "tags": ["Flowchart shapes (experimental)"] + "summary": "Get specific mind map node", + "tags": ["Mind map nodes (experimental)"] }, - "patch": { - "description": "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
", - "operationId": "update-shape-item-flowchart", + "delete": { + "description": "Deletes a mind map node item and its child nodes from the board.

Required scope

boards:write

Rate limiting

Level 3
", + "operationId": "delete-mindmap-node-experimental", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to update the item.", + "description": "Unique identifier (ID) of the board from which you want to delete the mind map node.", "in": "path", "name": "board_id", "required": true, @@ -7174,7 +7178,7 @@ } }, { - "description": "Unique identifier (ID) of the item that you want to update.", + "description": "Unique identifier (ID) of the mind map node that you want to delete.", "in": "path", "name": "item_id", "required": true, @@ -7183,26 +7187,16 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ShapeUpdateRequest" - } - } - }, - "required": true - }, "responses": { - "200": { + "204": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShapeItem" + "type": "object" } } }, - "description": "Shape item updated" + "description": "Mind map node deleted" }, "400": { "content": { @@ -7307,42 +7301,92 @@ "description": "Too many requests" } }, - "summary": "Update shape item", - "tags": ["Flowchart shapes (experimental)"] - }, - "delete": { - "description": "Deletes a flowchart shape item from the board.

Required scope

boards:write

Rate limiting

Level 3
", - "operationId": "delete-shape-item-flowchart", + "summary": "Delete mind map node", + "tags": ["Mind map nodes (experimental)"] + } + }, + "/v2-experimental/boards/{board_id}/mindmap_nodes": { + "parameters": [ + { + "schema": { + "type": "string" + }, + "name": "board_id", + "in": "path", + "required": true, + "description": "Unique identifier (ID) of the board from which you want to retrieve mind map nodes." + } + ], + "get": { + "summary": "Get mind map nodes", + "tags": ["Mind map nodes (experimental)"], + "responses": { + "200": { + "description": "Mind map nodes retrieved", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MindmapCursorPaged" + } + } + } + } + }, + "operationId": "get-mindmap-nodes-experimental", + "description": "Retrieves a list of mind map nodes for a specific board.\n\nThis 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
", "parameters": [ { - "description": "Unique identifier (ID) of the board from which you want to delete the item.", - "in": "path", - "name": "board_id", - "required": true, "schema": { "type": "string" - } + }, + "in": "query", + "name": "limit", + "description": "Maximum number of results returned" }, { - "description": "Unique identifier (ID) of the item that you want to delete.", + "schema": { + "type": "string" + }, + "in": "query", + "name": "cursor", + "description": "Points to the next portion of the results set" + } + ] + }, + "post": { + "description": "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.", + "operationId": "create-mindmap-nodes-experimental", + "parameters": [ + { + "description": "Unique identifier (ID) of the board where you want to create the item.", "in": "path", - "name": "item_id", + "name": "board_id", "required": true, "schema": { "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MindmapCreateRequest" + } + } + }, + "required": true + }, "responses": { - "204": { + "201": { "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/MindmapItem" } } }, - "description": "Shape item deleted" + "description": "Mind map node created" }, "400": { "content": { @@ -7447,154 +7491,186 @@ "description": "Too many requests" } }, - "summary": "Delete shape item", - "tags": ["Flowchart shapes (experimental)"] + "summary": "Create mind map node", + "tags": ["Mind map nodes (experimental)"] } }, - "/v2/boards/{board_id_PlatformFileUpload}/documents": { - "post": { - "x-readme": { - "explorer-enabled": false, - "samples-languages": ["shell"], - "code-samples": [ - { - "language": "curl", - "code": "curl -X \"POST\" \"https://api.miro.com/v2/boards/{board_id_PlatformFileUpload}/documents\" \\\n-H \"accept: application/json\" \\\n-H \"Authorization: Bearer {{ACCESS_TOKEN}}\" \\\n-H \"Content-Type: multipart/form-data\" \\\n-F \"data={\\\"title\\\":\\\"testpdf\\\",\\\"position\\\":{\\\"x\\\":3000,\\\"y\\\":3000}};type=application/json\" \\\n-F \"resource=@/Users/user/test.pdf;type=application/pdf\"\n", - "name": "Custom cURL snippet", - "install": "brew install curl", - "correspondingExample": "documentPostExample" - } - ] - }, - "description": "Adds a document item to a board by selecting file from device.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "create-document-item-using-file-from-device", + "/v2-experimental/boards/{board_id}/items": { + "get": { + "description": "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.\n\nThis 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
", + "operationId": "get-items-experimental", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to create the item.", + "in": "query", + "name": "limit", + "schema": { + "type": "string", + "default": "10", + "description": "The maximum number of results to return per call. If the number of items in the response is greater than the limit specified, the response returns the cursor parameter with a value.", + "maximum": 50, + "minimum": 10 + } + }, + { + "in": "query", + "name": "type", + "schema": { + "type": "string", + "enum": ["shape"] + } + }, + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string", + "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": "Unique identifier (ID) of the board for which you want to retrieve the list of available items.", "in": "path", - "name": "board_id_PlatformFileUpload", + "name": "board_id", "required": true, "schema": { "type": "string" } } ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "title": { - "type": "string", - "description": "Title for the document.", - "example": "foo.pdf" - }, - "position": { - "$ref": "#/components/schemas/PositionChange" - }, - "geometry": { - "$ref": "#/components/schemas/FixedRatioGeometry" - }, - "parent": { - "$ref": "#/components/schemas/Parent" - } - } - }, - "resource": { - "type": "string", - "format": "binary", - "description": "Select a file to upload. Maximum file size is 6 MB." - } - }, - "required": ["resource"] - } - } - } - }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentItem" - }, - "examples": { - "documentPostExample": { - "value": { - "id": "3458764517517819000", - "type": "document", - "data": { - "imageUrl": "https://api.miro.com/v2/boards/board_id_PlatformFileUpload/resources/documents/3458764515979043608?format=preview&redirect=false", - "title": "testpdf" - }, - "geometry": { - "width": 512, - "height": 512 - }, - "position": { - "x": 3000, - "y": 3000, - "origin": "center", - "relativeTo": "canvas_center" - }, - "links": { - "self": "https://api.miro.com/v2/boards/board_id_PlatformFileUpload/documents/3458764597687208572" - }, - "createdAt": "2024-08-21T11:19:57Z", - "createdBy": { - "id": "3458764569867985278", - "type": "user" - }, - "modifiedAt": "2024-08-21T11:19:57Z", - "modifiedBy": { - "id": "3458764569867985278", - "type": "user" - } + "$ref": "#/components/schemas/GenericItemCursorPaged" + } + } + }, + "description": "Items retrieved" + }, + "400": { + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Test error obj", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" } } } } }, - "description": "Document item created" + "description": "Malformed request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Test error obj", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } + } + } + }, + "description": "Not found" + }, + "429": { + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Test error obj", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } + } + } + }, + "description": "Too many requests" } }, - "summary": "Create document item using file from device", - "tags": ["documents"] + "summary": "Get items on board", + "tags": ["Flowchart shapes (experimental)"] } }, - "/v2/boards/{board_id_PlatformFileUpload}/documents/{item_id}": { - "patch": { - "x-readme": { - "explorer-enabled": false, - "samples-languages": ["shell"], - "code-samples": [ - { - "language": "curl", - "code": "curl -X \"PATCH\" \"https://api.miro.com/v2/boards/{board_id_PlatformFileUpload}/documents/{item_id}\" \\\n-H \"accept: application/json\" \\\n-H \"Authorization: Bearer {{ACCESS_TOKEN}}\" \\\n-H \"Content-Type: multipart/form-data\" \\\n-F \"data={\\\"title\\\":\\\"testpdf\\\",\\\"position\\\":{\\\"x\\\":3000,\\\"y\\\":3000}};type=application/json\" \\\n-F \"resource=@/Users/user/test.pdf;type=application/pdf\"\n", - "name": "Custom cURL snippet", - "install": "brew install curl", - "correspondingExample": "documentPatchExample" - } - ] - }, - "description": "Updates a document item on a board by using file from a device.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "update-document-item-using-file-from-device", + "/v2-experimental/boards/{board_id}/items/{item_id}": { + "get": { + "description": "Retrieves information for a specific item on a board.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-specific-item-experimental", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to update the item.", + "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", "in": "path", - "name": "board_id_PlatformFileUpload", + "name": "board_id", "required": true, "schema": { "type": "string" } }, { - "description": "Unique identifier (ID) of the item that you want to update.", + "description": "Unique identifier (ID) of the item that you want to retrieve.", "in": "path", "name": "item_id", "required": true, @@ -7603,321 +7679,43 @@ } } ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/UploadFileFromDevice" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DocumentItem" - }, - "examples": { - "documentPatchExample": { - "value": { - "id": "3458764517517819000", - "type": "document", - "data": { - "imageUrl": "https://api.miro.com/v2/boards/board_id_PlatformFileUpload/resources/documents/3458764515979043608?format=preview&redirect=false", - "title": "testpdf" - }, - "geometry": { - "width": 512, - "height": 512 - }, - "position": { - "x": 3000, - "y": 3000, - "origin": "center", - "relativeTo": "canvas_center" - }, - "links": { - "self": "https://api.miro.com/v2/boards/board_id_PlatformFileUpload/documents/3458764597687208572" - }, - "createdAt": "2024-08-21T11:19:57Z", - "createdBy": { - "id": "3458764569867985278", - "type": "user" - }, - "modifiedAt": "2024-08-21T11:19:57Z", - "modifiedBy": { - "id": "3458764569867985278", - "type": "user" - } - } - } + "$ref": "#/components/schemas/GenericItem" } } }, - "description": "Document item updated" - } - }, - "summary": "Update document item using file from device", - "tags": ["documents"] - } - }, - "/v2/boards/{board_id_PlatformFileUpload}/images": { - "post": { - "x-readme": { - "explorer-enabled": false, - "samples-languages": ["shell"], - "code-samples": [ - { - "language": "curl", - "code": "curl -X \"POST\" \"https://api.miro.com/v2/boards/{board_id_PlatformFileUpload}/images\" \\\n -H \"accept: application/json\" \\\n -H \"Authorization: Bearer {{ACCESS_TOKEN}} \\\n -H \"Content-Type: multipart/form-data\" \\\n -F \"data={\\\"position\\\":{\\\"x\\\":3000,\\\"y\\\":3000}};type=application/json\" \\\n -F \"resource=@image.png;type=image/png\"\n", - "name": "Custom cURL snippet", - "install": "brew install curl", - "correspondingExample": "imagePostExample" - } - ] - }, - "x-settings": { - "skip-tests": true - }, - "description": "Adds an image item to a board by specifying a file from device.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "create-image-item-using-local-file", - "parameters": [ - { - "description": "Unique identifier (ID) of the board where you want to create the item.", - "in": "path", - "name": "board_id_PlatformFileUpload", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/UploadFileFromDevice" - } - } + "description": "Item retrieved" }, - "required": true - }, - "responses": { - "201": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ImageItem" - }, - "examples": { - "imagePostExample": { - "value": { - "id": "3458764597687208572", - "type": "image", - "data": { - "imageUrl": "https://api.miro.com/v2/boards/board_id_PlatformFileUpload/resources/images/3458764515979043608?format=preview&redirect=false", - "title": "image" - }, - "geometry": { - "width": 512, - "height": 512 - }, - "position": { - "x": 3000, - "y": 3000, - "origin": "center", - "relativeTo": "canvas_center" - }, - "links": { - "self": "https://api.miro.com/v2/boards/board_id_PlatformFileUpload/images/3458764597687208572" - }, - "createdAt": "2024-08-21T11:19:57Z", - "createdBy": { - "id": "3458764569867985278", - "type": "user" - }, - "modifiedAt": "2024-08-21T11:19:57Z", - "modifiedBy": { - "id": "3458764569867985278", - "type": "user" - } - } - } - } - } - }, - "description": "Image item created" - } - }, - "summary": "Create image item using file from device", - "tags": ["images"] - } - }, - "/v2/boards/{board_id_PlatformFileUpload}/images/{item_id}": { - "patch": { - "x-readme": { - "explorer-enabled": false, - "samples-languages": ["shell"], - "code-samples": [ - { - "language": "curl", - "code": "curl -X \"PATCH\" \"https://api.miro.com/v2/boards/{board_id_PlatformFileUpload}/images/{item_id}\" \\\n -H \"accept: application/json\" \\\n -H \"Authorization: Bearer {{ACCESS_TOKEN}} \\\n -H \"Content-Type: multipart/form-data\" \\\n -F \"data={\\\"position\\\":{\\\"x\\\":3000,\\\"y\\\":3000}};type=application/json\" \\\n -F \"resource=@image.png;type=image/png\"\n", - "name": "Custom cURL snippet", - "install": "brew install curl", - "correspondingExample": "imagePatchExample" - } - ] - }, - "x-settings": { - "skip-tests": true - }, - "description": "Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
", - "operationId": "update-image-item-using-file-from-device", - "parameters": [ - { - "description": "Unique identifier (ID) of the board where you want to update the item.", - "in": "path", - "name": "board_id_PlatformFileUpload", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Unique identifier (ID) of the item that you want to update.", - "in": "path", - "name": "item_id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/UploadFileFromDevice" - } - } - }, - "required": true - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ImageItem" - }, - "examples": { - "imagePatchExample": { - "value": { - "id": "3458764597687208572", - "type": "image", - "data": { - "imageUrl": "https://api.miro.com/v2/boards/board_id_PlatformFileUpload/resources/images/3458764515979043608?format=preview&redirect=false", - "title": "image" - }, - "geometry": { - "width": 512, - "height": 512 - }, - "position": { - "x": 3000, - "y": 3000, - "origin": "center", - "relativeTo": "canvas_center" - }, - "links": { - "self": "https://api.miro.com/v2/boards/board_id_PlatformFileUpload/images/3458764597687208572" - }, - "createdAt": "2024-08-21T11:19:57Z", - "createdBy": { - "id": "3458764569867985278", - "type": "user" - }, - "modifiedAt": "2024-08-21T11:19:57Z", - "modifiedBy": { - "id": "3458764569867985278", - "type": "user" - } - } - } - } - } - }, - "description": "Image item updated" - } - }, - "summary": "Update image item using file from device", - "tags": ["images"] - } - }, - "/v2/boards/{board_id}/groups": { - "post": { - "description": "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
", - "operationId": "createGroup", - "summary": "Create group", - "parameters": [ - { - "in": "path", - "name": "board_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/BoardId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Group" - } - } - }, - "required": true - }, - "responses": { - "201": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GroupResponseShort" - } - } - }, - "description": "Group created" - }, - "400": { + "400": { "content": { "application/json": { "schema": { "type": "object", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", + "description": "Status code of the error", "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -7931,26 +7729,27 @@ "application/json": { "schema": { "type": "object", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", - "example": 404 + "description": "Status code of the error", + "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -7964,26 +7763,27 @@ "application/json": { "schema": { "type": "object", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", - "example": 429 + "description": "Status code of the error", + "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -7993,99 +7793,69 @@ "description": "Too many requests" } }, - "tags": ["groups"] + "summary": "Get specific item on board", + "tags": ["Flowchart shapes (experimental)"] }, - "get": { - "description": "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
", - "operationId": "get-all-groups", - "summary": "Get all groups on a board", + "delete": { + "description": "Deletes an item from a board.

Required scope

boards:write

Rate limiting

Level 3
", + "operationId": "delete-item-experimental", "parameters": [ { + "description": "Unique identifier (ID) of the board from which you want to delete the item.", "in": "path", "name": "board_id", - "description": "Unique identifier (ID) of the board.", "required": true, "schema": { - "$ref": "#/components/schemas/BoardId" - } - }, - { - "in": "query", - "name": "limit", - "description": "The maximum number of items to return at one time, default is 10, maximum is 50.", - "required": false, - "schema": { - "type": "integer", - "format": "int32", - "default": 10, - "maximum": 50, - "minimum": 10 + "type": "string" } }, { - "in": "query", - "name": "cursor", - "required": false, + "description": "Unique identifier (ID) of the item that you want to delete.", + "in": "path", + "name": "item_id", + "required": true, "schema": { "type": "string" } } ], "responses": { - "200": { + "204": { "content": { "application/json": { "schema": { - "properties": { - "limit": { - "type": "integer", - "format": "int32", - "description": "Limit of items.", - "example": 10 - }, - "size": { - "type": "integer", - "format": "int32", - "description": "Size of the items.", - "example": 1 - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GroupResponseShort" - } - } - } + "type": "object" } } }, - "description": "Groups retrieved" + "description": "Item deleted" }, "400": { "content": { "application/json": { "schema": { "type": "object", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", + "description": "Status code of the error", "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -8099,26 +7869,27 @@ "application/json": { "schema": { "type": "object", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", - "example": 404 + "description": "Status code of the error", + "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -8132,26 +7903,27 @@ "application/json": { "schema": { "type": "object", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", - "example": 429 + "description": "Status code of the error", + "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -8161,131 +7933,72 @@ "description": "Too many requests" } }, - "tags": ["groups"] + "summary": "Delete item", + "tags": ["items"] } }, - "/v2/boards/{board_id}/groups/items": { - "get": { - "description": "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
", - "operationId": "getItemsByGroupId", - "summary": "Get items of a group by ID", + "/v2-experimental/boards/{board_id}/shapes": { + "post": { + "description": "Adds a flowchart shape item to a board.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "create-shape-item-flowchart", "parameters": [ { + "description": "Unique identifier (ID) of the board where you want to create the item.", "in": "path", "name": "board_id", - "description": "Unique identifier (ID) of the board.", - "required": true, - "schema": { - "$ref": "#/components/schemas/BoardId" - } - }, - { - "in": "query", - "name": "limit", - "description": "The maximum number of items to return at one time, default is 10, maximum is 50.", - "required": false, - "schema": { - "type": "integer", - "format": "int32", - "default": 10, - "maximum": 50, - "minimum": 10 - } - }, - { - "in": "query", - "name": "cursor", - "required": false, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "group_item_id", - "description": "The ID of the group item to retrieve.", "required": true, "schema": { "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShapeCreateRequest" + } + } + }, + "required": true + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "limit": { - "type": "integer", - "format": "int32", - "description": "Limit of items.", - "example": 10 - }, - "size": { - "type": "integer", - "format": "int32", - "description": "Size of the items.", - "example": 1 - }, - "total": { - "type": "integer", - "format": "int32", - "description": "total items that are part of any group", - "example": 1 - }, - "data": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier (ID) of the group.", - "example": "3258764517517852419" - }, - "type": { - "type": "string", - "description": "Indicates the type of object returned. In this case, `type` returns `group`." - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ItemPagedResponse" - } - } - } - } - } + "$ref": "#/components/schemas/ShapeItem" } } }, - "description": "Items retrieved" + "description": "Shape item created" }, "400": { "content": { "application/json": { "schema": { "type": "object", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", + "description": "Status code of the error", "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -8299,26 +8012,27 @@ "application/json": { "schema": { "type": "object", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", - "example": 404 + "description": "Status code of the error", + "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -8332,26 +8046,27 @@ "application/json": { "schema": { "type": "object", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", - "example": 429 + "description": "Status code of the error", + "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -8361,31 +8076,31 @@ "description": "Too many requests" } }, - "tags": ["groups"] + "summary": "Create shape item", + "tags": ["Flowchart shapes (experimental)"] } }, - "/v2/boards/{board_id}/groups/{group_id}": { + "/v2-experimental/boards/{board_id}/shapes/{item_id}": { "get": { - "description": "Returns a list of items in a specific group.

Required scope

boards:read\n

Rate limiting

Level 2 per item ID", - "operationId": "getGroupById", - "summary": "Get a group by its ID", + "description": "Retrieves information for a specific shape item on a board.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-shape-item-flowchart", "parameters": [ { + "description": "Unique identifier (ID) of the board from which you want to retrieve a specific item.", "in": "path", "name": "board_id", - "description": "Unique identifier (ID) of the board.", "required": true, "schema": { - "$ref": "#/components/schemas/BoardId" + "type": "string" } }, { + "description": "Unique identifier (ID) of the item that you want to retrieve.", "in": "path", - "name": "group_id", - "description": "Unique identifier (ID) of the group.", + "name": "item_id", "required": true, "schema": { - "$ref": "#/components/schemas/GroupId" + "type": "string" } } ], @@ -8394,37 +8109,38 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GroupResponseShort" + "$ref": "#/components/schemas/ShapeItem" } } }, - "description": "Group retrieved" + "description": "Shape item retrieved" }, "400": { "content": { "application/json": { "schema": { "type": "object", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", + "description": "Status code of the error", "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -8438,26 +8154,27 @@ "application/json": { "schema": { "type": "object", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", - "example": 404 + "description": "Status code of the error", + "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -8471,26 +8188,27 @@ "application/json": { "schema": { "type": "object", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", - "example": 429 + "description": "Status code of the error", + "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -8500,78 +8218,79 @@ "description": "Too many requests" } }, - "tags": ["groups"] + "summary": "Get shape item", + "tags": ["Flowchart shapes (experimental)"] }, - "delete": { - "description": "Ungroups items from a group.

Required scope

boards:write

Rate limiting

Level 3
", - "operationId": "unGroup", - "summary": "Ungroup items", + "patch": { + "description": "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
", + "operationId": "update-shape-item-flowchart", "parameters": [ { + "description": "Unique identifier (ID) of the board where you want to update the item.", "in": "path", "name": "board_id", - "description": "Unique identifier (ID) of the board.", "required": true, "schema": { - "$ref": "#/components/schemas/BoardId" + "type": "string" } }, { + "description": "Unique identifier (ID) of the item that you want to update.", "in": "path", - "name": "group_id", - "description": "Unique identifier (ID) of the group.", + "name": "item_id", "required": true, "schema": { - "$ref": "#/components/schemas/GroupId" - } - }, - { - "in": "query", - "name": "delete_items", - "required": false, - "description": "Indicates whether the items should be removed. By default, false.", - "schema": { - "type": "boolean" + "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ShapeUpdateRequest" + } + } + }, + "required": true + }, "responses": { - "204": { + "200": { "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/ShapeItem" } } }, - "description": "Ungrouped" + "description": "Shape item updated" }, "400": { "content": { "application/json": { "schema": { "type": "object", - "description": "Test error object.", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", + "description": "Status code of the error", "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -8585,27 +8304,27 @@ "application/json": { "schema": { "type": "object", - "description": "Test error object.", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", - "example": 404 + "description": "Status code of the error", + "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -8619,27 +8338,27 @@ "application/json": { "schema": { "type": "object", - "description": "Test error object.", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", - "example": 429 + "description": "Status code of the error", + "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -8649,78 +8368,69 @@ "description": "Too many requests" } }, - "tags": ["groups"] + "summary": "Update shape item", + "tags": ["Flowchart shapes (experimental)"] }, - "put": { - "description": "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
", - "operationId": "updateGroup", - "summary": "Updates a group with new items", + "delete": { + "description": "Deletes a flowchart shape item from the board.

Required scope

boards:write

Rate limiting

Level 3
", + "operationId": "delete-shape-item-flowchart", "parameters": [ { + "description": "Unique identifier (ID) of the board from which you want to delete the item.", "in": "path", "name": "board_id", - "description": "Unique identifier (ID) of the board.", "required": true, "schema": { - "$ref": "#/components/schemas/BoardId" + "type": "string" } }, { + "description": "Unique identifier (ID) of the item that you want to delete.", "in": "path", - "name": "group_id", - "description": "Unique identifier (ID) of the group.", + "name": "item_id", "required": true, "schema": { - "$ref": "#/components/schemas/GroupId" + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Group" - } - } - }, - "required": true - }, "responses": { - "200": { + "204": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GroupResponseShort" + "type": "object" } } }, - "description": "update group response" + "description": "Shape item deleted" }, "400": { "content": { "application/json": { "schema": { "type": "object", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", + "description": "Status code of the error", "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -8734,26 +8444,27 @@ "application/json": { "schema": { "type": "object", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", - "example": 404 + "description": "Status code of the error", + "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -8767,26 +8478,27 @@ "application/json": { "schema": { "type": "object", + "description": "Test error obj", "properties": { "code": { "type": "string", - "description": "Code of the error.", + "description": "Code of the error", "example": "error" }, "message": { "type": "string", - "description": "Description of the error.", + "description": "Description of the error", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status Code of the error.", - "example": 429 + "description": "Status code of the error", + "example": 400 }, "type": { "type": "string", - "description": "Type of the error.", + "description": "Type of the error", "example": "error" } } @@ -8796,209 +8508,154 @@ "description": "Too many requests" } }, - "tags": ["groups"] + "summary": "Delete shape item", + "tags": ["Flowchart shapes (experimental)"] } }, - "/v2/boards/{board_id}/groups/{group_id}?": { - "delete": { - "description": "Deletes a group from a board. All the items in the groups are deleted along with the group.

Required scope

boards:write

Rate limiting

Level 3
", - "operationId": "deleteGroup", - "summary": "Deletes the group", - "parameters": [ - { - "in": "path", - "name": "board_id", - "description": "Unique identifier (ID) of the board.", - "required": true, - "schema": { - "$ref": "#/components/schemas/BoardId" + "/v2/boards/{board_id_PlatformFileUpload}/documents": { + "post": { + "x-readme": { + "explorer-enabled": false, + "samples-languages": ["shell"], + "code-samples": [ + { + "language": "curl", + "code": "curl -X \"POST\" \"https://api.miro.com/v2/boards/{board_id_PlatformFileUpload}/documents\" \\\n-H \"accept: application/json\" \\\n-H \"Authorization: Bearer {{ACCESS_TOKEN}}\" \\\n-H \"Content-Type: multipart/form-data\" \\\n-F \"data={\\\"title\\\":\\\"testpdf\\\",\\\"position\\\":{\\\"x\\\":3000,\\\"y\\\":3000}};type=application/json\" \\\n-F \"resource=@/Users/user/test.pdf;type=application/pdf\"\n", + "name": "Custom cURL snippet", + "install": "brew install curl", + "correspondingExample": "documentPostExample" } - }, + ] + }, + "description": "Adds a document item to a board by selecting file from device.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "create-document-item-using-file-from-device", + "parameters": [ { + "description": "Unique identifier (ID) of the board where you want to create the item.", "in": "path", - "name": "group_id", - "description": "Unique identifier (ID) of the group.", - "required": true, - "schema": { - "$ref": "#/components/schemas/GroupId" - } - }, - { - "in": "query", - "name": "delete_items", + "name": "board_id_PlatformFileUpload", "required": true, - "description": "Indicates whether the items should be removed. Set to `true` to delete items in the group.", "schema": { - "type": "boolean" + "type": "string" } } ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "Title for the document.", + "example": "foo.pdf" + }, + "position": { + "$ref": "#/components/schemas/PositionChange" + }, + "geometry": { + "$ref": "#/components/schemas/FixedRatioGeometry" + }, + "parent": { + "$ref": "#/components/schemas/Parent" + } + } + }, + "resource": { + "type": "string", + "format": "binary", + "description": "Select a file to upload. Maximum file size is 6 MB." + } + }, + "required": ["resource"] + } + } + } + }, "responses": { - "204": { + "201": { "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/DocumentItem" + }, + "examples": { + "documentPostExample": { + "value": { + "id": "3458764517517819000", + "type": "document", + "data": { + "imageUrl": "https://api.miro.com/v2/boards/board_id_PlatformFileUpload/resources/documents/3458764515979043608?format=preview&redirect=false", + "title": "testpdf" + }, + "geometry": { + "width": 512, + "height": 512 + }, + "position": { + "x": 3000, + "y": 3000, + "origin": "center", + "relativeTo": "canvas_center" + }, + "links": { + "self": "https://api.miro.com/v2/boards/board_id_PlatformFileUpload/documents/3458764597687208572" + }, + "createdAt": "2024-08-21T11:19:57Z", + "createdBy": { + "id": "3458764569867985278", + "type": "user" + }, + "modifiedAt": "2024-08-21T11:19:57Z", + "modifiedBy": { + "id": "3458764569867985278", + "type": "user" + } + } + } } } }, - "description": "Group deleted" - }, - "400": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error object.", - "properties": { - "code": { - "type": "string", - "description": "Code of the error.", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error.", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status Code of the error.", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error.", - "example": "error" - } - } - } - } - }, - "description": "Malformed request" - }, - "404": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error object.", - "properties": { - "code": { - "type": "string", - "description": "Code of the error.", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error.", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status Code of the error.", - "example": 404 - }, - "type": { - "type": "string", - "description": "Type of the error.", - "example": "error" - } - } - } - } - }, - "description": "Not found" - }, - "429": { - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Test error object.", - "properties": { - "code": { - "type": "string", - "description": "Code of the error.", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error.", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status Code of the error.", - "example": 429 - }, - "type": { - "type": "string", - "description": "Type of the error.", - "example": "error" - } - } - } - } - }, - "description": "Too many requests" + "description": "Document item created" } }, - "tags": ["groups"] + "summary": "Create document item using file from device", + "tags": ["documents"] } }, - "/v2/oauth/revoke": { - "post": { - "summary": "Revoke token (v2)", - "description": "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-v2", - "tags": ["OAuth"], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RevokeTokenRequest" - } + "/v2/boards/{board_id_PlatformFileUpload}/documents/{item_id}": { + "patch": { + "x-readme": { + "explorer-enabled": false, + "samples-languages": ["shell"], + "code-samples": [ + { + "language": "curl", + "code": "curl -X \"PATCH\" \"https://api.miro.com/v2/boards/{board_id_PlatformFileUpload}/documents/{item_id}\" \\\n-H \"accept: application/json\" \\\n-H \"Authorization: Bearer {{ACCESS_TOKEN}}\" \\\n-H \"Content-Type: multipart/form-data\" \\\n-F \"data={\\\"title\\\":\\\"testpdf\\\",\\\"position\\\":{\\\"x\\\":3000,\\\"y\\\":3000}};type=application/json\" \\\n-F \"resource=@/Users/user/test.pdf;type=application/pdf\"\n", + "name": "Custom cURL snippet", + "install": "brew install curl", + "correspondingExample": "documentPatchExample" } - }, - "required": true + ] }, - "responses": { - "204": { - "description": "Token revoked" - }, - "404": { - "description": "Failed to revoke token", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v2/boards/{board_id}/items/{item_id}/tags": { - "get": { - "description": "Retrieves all the tags from the specified item.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-tags-from-item", + "description": "Updates a document item on a board by using file from a device.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "update-document-item-using-file-from-device", "parameters": [ { - "description": "Unique identifier (ID) of the board with the item whose tags you want to retrieve.", + "description": "Unique identifier (ID) of the board where you want to update the item.", "in": "path", - "name": "board_id", + "name": "board_id_PlatformFileUpload", "required": true, "schema": { "type": "string" } }, { - "description": "Unique identifier (ID) of the item whose tags you want to retrieve.", + "description": "Unique identifier (ID) of the item that you want to update.", "in": "path", "name": "item_id", "required": true, @@ -9007,133 +8664,272 @@ } } ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/UploadFileFromDevice" + } + } + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetTagsResponse" + "$ref": "#/components/schemas/DocumentItem" + }, + "examples": { + "documentPatchExample": { + "value": { + "id": "3458764517517819000", + "type": "document", + "data": { + "imageUrl": "https://api.miro.com/v2/boards/board_id_PlatformFileUpload/resources/documents/3458764515979043608?format=preview&redirect=false", + "title": "testpdf" + }, + "geometry": { + "width": 512, + "height": 512 + }, + "position": { + "x": 3000, + "y": 3000, + "origin": "center", + "relativeTo": "canvas_center" + }, + "links": { + "self": "https://api.miro.com/v2/boards/board_id_PlatformFileUpload/documents/3458764597687208572" + }, + "createdAt": "2024-08-21T11:19:57Z", + "createdBy": { + "id": "3458764569867985278", + "type": "user" + }, + "modifiedAt": "2024-08-21T11:19:57Z", + "modifiedBy": { + "id": "3458764569867985278", + "type": "user" + } + } + } } } }, - "description": "Get tags from an item" + "description": "Document item updated" + } + }, + "summary": "Update document item using file from device", + "tags": ["documents"] + } + }, + "/v2/boards/{board_id_PlatformFileUpload}/images": { + "post": { + "x-readme": { + "explorer-enabled": false, + "samples-languages": ["shell"], + "code-samples": [ + { + "language": "curl", + "code": "curl -X \"POST\" \"https://api.miro.com/v2/boards/{board_id_PlatformFileUpload}/images\" \\\n -H \"accept: application/json\" \\\n -H \"Authorization: Bearer {{ACCESS_TOKEN}} \\\n -H \"Content-Type: multipart/form-data\" \\\n -F \"data={\\\"position\\\":{\\\"x\\\":3000,\\\"y\\\":3000}};type=application/json\" \\\n -F \"resource=@image.png;type=image/png\"\n", + "name": "Custom cURL snippet", + "install": "brew install curl", + "correspondingExample": "imagePostExample" + } + ] + }, + "x-settings": { + "skip-tests": true + }, + "description": "Adds an image item to a board by specifying a file from device.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "create-image-item-using-local-file", + "parameters": [ + { + "description": "Unique identifier (ID) of the board where you want to create the item.", + "in": "path", + "name": "board_id_PlatformFileUpload", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/UploadFileFromDevice" + } + } }, - "400": { + "required": true + }, + "responses": { + "201": { "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" + "$ref": "#/components/schemas/ImageItem" + }, + "examples": { + "imagePostExample": { + "value": { + "id": "3458764597687208572", + "type": "image", + "data": { + "imageUrl": "https://api.miro.com/v2/boards/board_id_PlatformFileUpload/resources/images/3458764515979043608?format=preview&redirect=false", + "title": "image" + }, + "geometry": { + "width": 512, + "height": 512 + }, + "position": { + "x": 3000, + "y": 3000, + "origin": "center", + "relativeTo": "canvas_center" + }, + "links": { + "self": "https://api.miro.com/v2/boards/board_id_PlatformFileUpload/images/3458764597687208572" + }, + "createdAt": "2024-08-21T11:19:57Z", + "createdBy": { + "id": "3458764569867985278", + "type": "user" + }, + "modifiedAt": "2024-08-21T11:19:57Z", + "modifiedBy": { + "id": "3458764569867985278", + "type": "user" + } } } } } }, - "description": "Malformed request" + "description": "Image item created" + } + }, + "summary": "Create image item using file from device", + "tags": ["images"] + } + }, + "/v2/boards/{board_id_PlatformFileUpload}/images/{item_id}": { + "patch": { + "x-readme": { + "explorer-enabled": false, + "samples-languages": ["shell"], + "code-samples": [ + { + "language": "curl", + "code": "curl -X \"PATCH\" \"https://api.miro.com/v2/boards/{board_id_PlatformFileUpload}/images/{item_id}\" \\\n -H \"accept: application/json\" \\\n -H \"Authorization: Bearer {{ACCESS_TOKEN}} \\\n -H \"Content-Type: multipart/form-data\" \\\n -F \"data={\\\"position\\\":{\\\"x\\\":3000,\\\"y\\\":3000}};type=application/json\" \\\n -F \"resource=@image.png;type=image/png\"\n", + "name": "Custom cURL snippet", + "install": "brew install curl", + "correspondingExample": "imagePatchExample" + } + ] + }, + "x-settings": { + "skip-tests": true + }, + "description": "Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
", + "operationId": "update-image-item-using-file-from-device", + "parameters": [ + { + "description": "Unique identifier (ID) of the board where you want to update the item.", + "in": "path", + "name": "board_id_PlatformFileUpload", + "required": true, + "schema": { + "type": "string" + } }, - "404": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" - } - } - } + { + "description": "Unique identifier (ID) of the item that you want to update.", + "in": "path", + "name": "item_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/UploadFileFromDevice" } - }, - "description": "Not found" + } }, - "429": { + "required": true + }, + "responses": { + "200": { "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "code": { - "type": "string", - "description": "Code of the error", - "example": "error" - }, - "message": { - "type": "string", - "description": "Description of the error", - "example": "Error message" - }, - "status": { - "type": "integer", - "format": "int32", - "description": "Status code of the error", - "example": 400 - }, - "type": { - "type": "string", - "description": "Type of the error", - "example": "error" + "$ref": "#/components/schemas/ImageItem" + }, + "examples": { + "imagePatchExample": { + "value": { + "id": "3458764597687208572", + "type": "image", + "data": { + "imageUrl": "https://api.miro.com/v2/boards/board_id_PlatformFileUpload/resources/images/3458764515979043608?format=preview&redirect=false", + "title": "image" + }, + "geometry": { + "width": 512, + "height": 512 + }, + "position": { + "x": 3000, + "y": 3000, + "origin": "center", + "relativeTo": "canvas_center" + }, + "links": { + "self": "https://api.miro.com/v2/boards/board_id_PlatformFileUpload/images/3458764597687208572" + }, + "createdAt": "2024-08-21T11:19:57Z", + "createdBy": { + "id": "3458764569867985278", + "type": "user" + }, + "modifiedAt": "2024-08-21T11:19:57Z", + "modifiedBy": { + "id": "3458764569867985278", + "type": "user" + } } } } } }, - "description": "Too many requests" + "description": "Image item updated" } }, - "summary": "Get tags from item", - "tags": ["tags"] + "summary": "Update image item using file from device", + "tags": ["images"] } }, - "/v2/boards/{board_id}/tags": { + "/v2/boards/{board_id}/groups": { "post": { - "description": "Creates a tag on a board.

Required scope

boards:write

Rate limiting

Level 1
", - "operationId": "create-tag", + "description": "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
", + "operationId": "createGroup", + "summary": "Create group", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to create the tag.", "in": "path", "name": "board_id", "required": true, "schema": { - "type": "string" + "$ref": "#/components/schemas/BoardId" } } ], @@ -9141,7 +8937,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TagCreateRequest" + "$ref": "#/components/schemas/Group" } } }, @@ -9152,11 +8948,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TagWithLinks" + "$ref": "#/components/schemas/GroupResponseShort" } } }, - "description": "Tag created" + "description": "Group created" }, "400": { "content": { @@ -9166,23 +8962,23 @@ "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", + "description": "Status Code of the error.", "example": 400 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9199,23 +8995,23 @@ "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", - "example": 400 + "description": "Status Code of the error.", + "example": 404 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9232,23 +9028,23 @@ "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", - "example": 400 + "description": "Status Code of the error.", + "example": 429 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9258,36 +9054,39 @@ "description": "Too many requests" } }, - "summary": "Create tag", - "tags": ["tags"] + "tags": ["groups"] }, "get": { - "description": "Retrieves all the tags from the specified board.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-tags-from-board", + "description": "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
", + "operationId": "get-all-groups", + "summary": "Get all groups on a board", "parameters": [ + { + "in": "path", + "name": "board_id", + "description": "Unique identifier (ID) of the board.", + "required": true, + "schema": { + "$ref": "#/components/schemas/BoardId" + } + }, { "in": "query", "name": "limit", + "description": "The maximum number of items to return at one time, default is 10, maximum is 50.", + "required": false, "schema": { - "type": "string", - "description": "The maximum number of items that can be returned for a single request.\nDefault: `20`.", + "type": "integer", + "format": "int32", + "default": 10, "maximum": 50, - "minimum": 1 + "minimum": 10 } }, { "in": "query", - "name": "offset", - "schema": { - "type": "string", - "description": "The displacement of the first item in the collection to return.\nDefault: `0`." - } - }, - { - "description": "Unique identifier (ID) of the board whose tags you want to retrieve.", - "in": "path", - "name": "board_id", - "required": true, + "name": "cursor", + "required": false, "schema": { "type": "string" } @@ -9298,11 +9097,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TagsPagedResponse" + "properties": { + "limit": { + "type": "integer", + "format": "int32", + "description": "Limit of items.", + "example": 10 + }, + "size": { + "type": "integer", + "format": "int32", + "description": "Size of the items.", + "example": 1 + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupResponseShort" + } + } + } } } }, - "description": "Board tags retrieved" + "description": "Groups retrieved" }, "400": { "content": { @@ -9312,23 +9130,23 @@ "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", + "description": "Status Code of the error.", "example": 400 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9345,23 +9163,23 @@ "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", - "example": 400 + "description": "Status Code of the error.", + "example": 404 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9378,23 +9196,23 @@ "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", - "example": 400 + "description": "Status Code of the error.", + "example": 429 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9404,28 +9222,49 @@ "description": "Too many requests" } }, - "summary": "Get tags from board", - "tags": ["tags"] + "tags": ["groups"] } }, - "/v2/boards/{board_id}/tags/{tag_id}": { + "/v2/boards/{board_id}/groups/items": { "get": { - "description": "Retrieves information for a specific tag.

Required scope

boards:write

Rate limiting

Level 1
", - "operationId": "get-tag", + "description": "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
", + "operationId": "getItemsByGroupId", + "summary": "Get items of a group by ID", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to retrieve a specific tag.", "in": "path", "name": "board_id", + "description": "Unique identifier (ID) of the board.", "required": true, + "schema": { + "$ref": "#/components/schemas/BoardId" + } + }, + { + "in": "query", + "name": "limit", + "description": "The maximum number of items to return at one time, default is 10, maximum is 50.", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 10, + "maximum": 50, + "minimum": 10 + } + }, + { + "in": "query", + "name": "cursor", + "required": false, "schema": { "type": "string" } }, { - "description": "Unique identifier (ID) of the tag that you want to retrieve.", - "in": "path", - "name": "tag_id", + "in": "query", + "name": "group_item_id", + "description": "The ID of the group item to retrieve.", "required": true, "schema": { "type": "string" @@ -9437,11 +9276,51 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TagWithLinks" + "type": "object", + "properties": { + "limit": { + "type": "integer", + "format": "int32", + "description": "Limit of items.", + "example": 10 + }, + "size": { + "type": "integer", + "format": "int32", + "description": "Size of the items.", + "example": 1 + }, + "total": { + "type": "integer", + "format": "int32", + "description": "total items that are part of any group", + "example": 1 + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier (ID) of the group.", + "example": "3258764517517852419" + }, + "type": { + "type": "string", + "description": "Indicates the type of object returned. In this case, `type` returns `group`." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ItemPagedResponse" + } + } + } + } + } } } }, - "description": "Tag retrieved by id" + "description": "Items retrieved" }, "400": { "content": { @@ -9451,23 +9330,23 @@ "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", + "description": "Status Code of the error.", "example": 400 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9484,23 +9363,23 @@ "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", - "example": 400 + "description": "Status Code of the error.", + "example": 404 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9517,23 +9396,23 @@ "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", - "example": 400 + "description": "Status Code of the error.", + "example": 429 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9543,52 +9422,44 @@ "description": "Too many requests" } }, - "summary": "Get tag", - "tags": ["tags"] - }, - "patch": { - "description": "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
", - "operationId": "update-tag", + "tags": ["groups"] + } + }, + "/v2/boards/{board_id}/groups/{group_id}": { + "get": { + "description": "Returns a list of items in a specific group.

Required scope

boards:read\n

Rate limiting

Level 2 per item ID", + "operationId": "getGroupById", + "summary": "Get a group by its ID", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to update a specific tag.", "in": "path", "name": "board_id", + "description": "Unique identifier (ID) of the board.", "required": true, "schema": { - "type": "string" + "$ref": "#/components/schemas/BoardId" } }, { - "description": "Unique identifier (ID) of the tag that you want to update.", "in": "path", - "name": "tag_id", + "name": "group_id", + "description": "Unique identifier (ID) of the group.", "required": true, "schema": { - "type": "string" + "$ref": "#/components/schemas/GroupId" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TagUpdateRequest" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TagWithLinks" + "$ref": "#/components/schemas/GroupResponseShort" } } }, - "description": "Tag updated" + "description": "Group retrieved" }, "400": { "content": { @@ -9598,23 +9469,23 @@ "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", + "description": "Status Code of the error.", "example": 400 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9631,23 +9502,23 @@ "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", - "example": 400 + "description": "Status Code of the error.", + "example": 404 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9664,23 +9535,23 @@ "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", - "example": 400 + "description": "Status Code of the error.", + "example": 429 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9690,33 +9561,42 @@ "description": "Too many requests" } }, - "summary": "Update tag", - "tags": ["tags"] + "tags": ["groups"] }, "delete": { - "description": "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
", - "operationId": "delete-tag", + "description": "Ungroups items from a group.

Required scope

boards:write

Rate limiting

Level 3
", + "operationId": "unGroup", + "summary": "Ungroup items", "parameters": [ { - "description": "Unique identifier (ID) of the board where you want to delete a specific tag.", "in": "path", "name": "board_id", + "description": "Unique identifier (ID) of the board.", "required": true, "schema": { - "type": "string" + "$ref": "#/components/schemas/BoardId" } }, { - "description": "Unique identifier (ID) of the tag that you want to delete.", "in": "path", - "name": "tag_id", + "name": "group_id", + "description": "Unique identifier (ID) of the group.", "required": true, "schema": { - "type": "string" + "$ref": "#/components/schemas/GroupId" } - } - ], - "responses": { + }, + { + "in": "query", + "name": "delete_items", + "required": false, + "description": "Indicates whether the items should be removed. By default, false.", + "schema": { + "type": "boolean" + } + } + ], + "responses": { "204": { "content": { "application/json": { @@ -9725,33 +9605,34 @@ } } }, - "description": "Tag deleted" + "description": "Ungrouped" }, "400": { "content": { "application/json": { "schema": { "type": "object", + "description": "Test error object.", "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", + "description": "Status Code of the error.", "example": 400 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9765,26 +9646,27 @@ "application/json": { "schema": { "type": "object", + "description": "Test error object.", "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", - "example": 400 + "description": "Status Code of the error.", + "example": 404 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9798,26 +9680,27 @@ "application/json": { "schema": { "type": "object", + "description": "Test error object.", "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", - "example": 400 + "description": "Status Code of the error.", + "example": 429 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9827,62 +9710,52 @@ "description": "Too many requests" } }, - "summary": "Delete tag", - "tags": ["tags"] - } - }, - "/v2/boards/{board_id_PlatformTags}/items": { - "get": { - "description": "Retrieves all the items that have the specified tag.

Required scope

boards:read

Rate limiting

Level 1
", - "operationId": "get-items-by-tag", + "tags": ["groups"] + }, + "put": { + "description": "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
", + "operationId": "updateGroup", + "summary": "Updates a group with new items", "parameters": [ { - "in": "query", - "name": "limit", - "schema": { - "type": "string", - "description": "The maximum number of items that can be returned for a single request.\nDefault: `20`.", - "maximum": 50, - "minimum": 1 - } - }, - { - "in": "query", - "name": "offset", - "schema": { - "type": "string", - "description": "The displacement of the first item in the collection to return.\nDefault: `0`." - } - }, - { - "description": "Unique identifier (ID) of the board where you want to retrieve a specific tag.", "in": "path", - "name": "board_id_PlatformTags", + "name": "board_id", + "description": "Unique identifier (ID) of the board.", "required": true, "schema": { - "type": "string" + "$ref": "#/components/schemas/BoardId" } }, { - "description": "Unique identifier (ID) of the tag that you want to retrieve.", - "in": "query", - "name": "tag_id", + "in": "path", + "name": "group_id", + "description": "Unique identifier (ID) of the group.", "required": true, "schema": { - "type": "string" + "$ref": "#/components/schemas/GroupId" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Group" + } + } + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ItemPagedResponse" + "$ref": "#/components/schemas/GroupResponseShort" } } }, - "description": "Item with certain tag" + "description": "update group response" }, "400": { "content": { @@ -9892,23 +9765,23 @@ "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", + "description": "Status Code of the error.", "example": 400 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9925,23 +9798,23 @@ "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", - "example": 400 + "description": "Status Code of the error.", + "example": 404 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9958,23 +9831,23 @@ "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", - "example": 400 + "description": "Status Code of the error.", + "example": 429 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -9984,40 +9857,40 @@ "description": "Too many requests" } }, - "summary": "Get items by tag", - "tags": ["tags"] + "tags": ["groups"] } }, - "/v2/boards/{board_id_PlatformTags}/items/{item_id}": { - "post": { - "description": "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
", - "operationId": "attach-tag-to-item", + "/v2/boards/{board_id}/groups/{group_id}?": { + "delete": { + "description": "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
", + "operationId": "deleteGroup", + "summary": "Deletes the group", "parameters": [ { - "description": "Unique identifier (ID) of the board with the item that you want to add a tag to.", "in": "path", - "name": "board_id_PlatformTags", + "name": "board_id", + "description": "Unique identifier (ID) of the board.", "required": true, "schema": { - "type": "string" + "$ref": "#/components/schemas/BoardId" } }, { - "description": "Unique identifier (ID) of the item to which you want to add a tag.", "in": "path", - "name": "item_id", + "name": "group_id", + "description": "Unique identifier (ID) of the group.", "required": true, "schema": { - "type": "string" + "$ref": "#/components/schemas/GroupId" } }, { - "description": "Unique identifier (ID) of the tag you want to add to the item.", "in": "query", - "name": "tag_id", + "name": "delete_items", "required": true, + "description": "Indicates whether the items should be removed. Set to `true` to delete items in the group.", "schema": { - "type": "string" + "type": "boolean" } } ], @@ -10030,33 +9903,34 @@ } } }, - "description": "Add a tag to an item" + "description": "Group deleted" }, "400": { "content": { "application/json": { "schema": { "type": "object", + "description": "Test error object.", "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", + "description": "Status Code of the error.", "example": 400 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -10070,26 +9944,27 @@ "application/json": { "schema": { "type": "object", + "description": "Test error object.", "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", - "example": 400 + "description": "Status Code of the error.", + "example": 404 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -10103,26 +9978,27 @@ "application/json": { "schema": { "type": "object", + "description": "Test error object.", "properties": { "code": { "type": "string", - "description": "Code of the error", + "description": "Code of the error.", "example": "error" }, "message": { "type": "string", - "description": "Description of the error", + "description": "Description of the error.", "example": "Error message" }, "status": { "type": "integer", "format": "int32", - "description": "Status code of the error", - "example": 400 + "description": "Status Code of the error.", + "example": 429 }, "type": { "type": "string", - "description": "Type of the error", + "description": "Type of the error.", "example": "error" } } @@ -10132,51 +10008,76 @@ "description": "Too many requests" } }, - "summary": "Attach tag to item", - "tags": ["tags"] - }, - "delete": { - "description": "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
", - "operationId": "remove-tag-from-item", + "tags": ["groups"] + } + }, + "/v2/oauth/revoke": { + "post": { + "summary": "Revoke token (v2)", + "description": "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-v2", + "tags": ["OAuth"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RevokeTokenRequest" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "Token revoked" + }, + "404": { + "description": "Failed to revoke token", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/v2/boards/{board_id}/items/{item_id}/tags": { + "get": { + "description": "Retrieves all the tags from the specified item.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-tags-from-item", "parameters": [ { - "description": "Unique identifier (ID) of the board with the item that you want to remove a tag from.", + "description": "Unique identifier (ID) of the board with the item whose tags you want to retrieve.", "in": "path", - "name": "board_id_PlatformTags", + "name": "board_id", "required": true, "schema": { "type": "string" } }, { - "description": "Unique identifier (ID) of the item that you want to remove the tag from.", + "description": "Unique identifier (ID) of the item whose tags you want to retrieve.", "in": "path", "name": "item_id", "required": true, "schema": { "type": "string" } - }, - { - "description": "Unique identifier (ID) of the tag that you want to remove from the item.", - "in": "query", - "name": "tag_id", - "required": true, - "schema": { - "type": "string" - } } ], "responses": { - "204": { + "200": { "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/GetTagsResponse" } } }, - "description": "Tag removed from an item" + "description": "Get tags from an item" }, "400": { "content": { @@ -10278,41 +10179,30 @@ "description": "Too many requests" } }, - "summary": "Remove tag from item", + "summary": "Get tags from item", "tags": ["tags"] } }, - "/v2/orgs/{org_id}/teams/{team_id}/projects": { + "/v2/boards/{board_id}/tags": { "post": { - "description": "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.

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.

", - "operationId": "enterprise-create-project", + "description": "Creates a tag on a board.

Required scope

boards:write

Rate limiting

Level 1
", + "operationId": "create-tag", "parameters": [ { - "name": "org_id", - "description": "The ID of the organization within which you you want to create a project.", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "example": "3074457345618265000" - }, - { - "name": "team_id", - "description": "The ID of the team within which you you want to create a project.", + "description": "Unique identifier (ID) of the board where you want to create the tag.", "in": "path", + "name": "board_id", "required": true, "schema": { "type": "string" - }, - "example": "3074457345619012000" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateProjectRequest" + "$ref": "#/components/schemas/TagCreateRequest" } } }, @@ -10323,121 +10213,145 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/TagWithLinks" } } }, - "description": "Contains information about the project, such as the project name." + "description": "Tag created" }, "400": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error400" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, "description": "Malformed request" }, - "401": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error401" - } - } - }, - "description": "Invalid authentication credentials" - }, - "403": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error403" - } - } - }, - "description": "Invalid access" - }, "404": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error404" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, "description": "Not found" }, - "409": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error409" - } - } - }, - "description": "Conflict" - }, "429": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error429" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, "description": "Too many requests" } }, - "summary": "Create project", - "tags": ["Projects"] + "summary": "Create tag", + "tags": ["tags"] }, "get": { - "description": "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).

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.

", - "operationId": "enterprise-get-projects", + "description": "Retrieves all the tags from the specified board.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-tags-from-board", "parameters": [ { - "name": "org_id", - "description": "The ID of the organization from which you want to retrieve the list of available projects.", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "example": "3074457345618265000" - }, - { - "name": "team_id", - "description": "The ID of the team from which you want to retrieve the list of available projects.", - "in": "path", - "required": true, + "in": "query", + "name": "limit", "schema": { - "type": "string" - }, - "example": "3074457345619012000" + "type": "string", + "description": "The maximum number of items that can be returned for a single request.\nDefault: `20`.", + "maximum": 50, + "minimum": 1 + } }, { - "name": "limit", - "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.", "in": "query", + "name": "offset", "schema": { - "type": "integer", - "format": "int32", - "minimum": 1, - "maximum": 100, - "default": 100 - }, - "example": 100 + "type": "string", + "description": "The displacement of the first item in the collection to return.\nDefault: `0`." + } }, { - "name": "cursor", - "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.", - "in": "query", + "description": "Unique identifier (ID) of the board whose tags you want to retrieve.", + "in": "path", + "name": "board_id", + "required": true, "schema": { "type": "string" - }, - "example": "3074457345618265000" + } } ], "responses": { @@ -10445,101 +10359,138 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectPage" + "$ref": "#/components/schemas/TagsPagedResponse" } } }, - "description": "Contains the result set information, such as the content, limit, cursor, or size." + "description": "Board tags retrieved" }, "400": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error400" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, "description": "Malformed request" }, - "401": { + "404": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error401" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, - "description": "Invalid authentication credentials" + "description": "Not found" }, - "403": { + "429": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error403" - } - } - }, - "description": "Invalid access" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error404" - } - } - }, - "description": "Not found" - }, - "429": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error429" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, "description": "Too many requests" } }, - "summary": "List of projects", - "tags": ["Projects"] + "summary": "Get tags from board", + "tags": ["tags"] } }, - "/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}": { + "/v2/boards/{board_id}/tags/{tag_id}": { "get": { - "description": "Retrieves project information, such as a name for an existing project.

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.

", - "operationId": "enterprise-get-project", + "description": "Retrieves information for a specific tag.

Required scope

boards:write

Rate limiting

Level 1
", + "operationId": "get-tag", "parameters": [ { - "name": "org_id", - "description": "The ID of the organization from which you want to retrieve the project information.", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "example": "3074457345618265000" - }, - { - "name": "team_id", - "description": "The ID of the team from which you want to retrieve the project information.", + "description": "Unique identifier (ID) of the board where you want to retrieve a specific tag.", "in": "path", + "name": "board_id", "required": true, "schema": { "type": "string" - }, - "example": "3074457345619012000" + } }, { - "name": "project_id", - "description": "The ID of the project for which you want to retrieve the information.", + "description": "Unique identifier (ID) of the tag that you want to retrieve.", "in": "path", + "name": "tag_id", "required": true, "schema": { "type": "string" - }, - "example": "3074457345618265000" + } } ], "responses": { @@ -10547,47 +10498,73 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/TagWithLinks" } } }, - "description": "Project object" + "description": "Tag retrieved by id" }, "400": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error400" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, "description": "Malformed request" }, - "401": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error401" - } - } - }, - "description": "Invalid authentication credentials" - }, - "403": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error403" - } - } - }, - "description": "Invalid access" - }, "404": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error404" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, @@ -10597,56 +10574,67 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error429" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, "description": "Too many requests" } }, - "summary": "Get project", - "tags": ["Projects"] + "summary": "Get tag", + "tags": ["tags"] }, "patch": { - "description": "Update information about a project, such as the project name.

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.

", - "operationId": "enterprise-update-project", + "description": "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
", + "operationId": "update-tag", "parameters": [ { - "name": "org_id", - "description": "The ID of an Organization.", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "example": "3074457345618265000" - }, - { - "name": "team_id", - "description": "The ID of a Team.", + "description": "Unique identifier (ID) of the board where you want to update a specific tag.", "in": "path", + "name": "board_id", "required": true, "schema": { "type": "string" - }, - "example": "3074457345619012000" + } }, { - "name": "project_id", - "description": "The ID of a Project.", + "description": "Unique identifier (ID) of the tag that you want to update.", "in": "path", + "name": "tag_id", "required": true, "schema": { "type": "string" - }, - "example": "3074457345618265000" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateProjectRequest" + "$ref": "#/components/schemas/TagUpdateRequest" } } }, @@ -10657,214 +10645,293 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/TagWithLinks" } } }, - "description": "Project object" + "description": "Tag updated" }, "400": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error400" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, "description": "Malformed request" }, - "401": { + "404": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error401" - } - } - }, - "description": "Invalid authentication credentials" - }, - "403": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error403" - } - } - }, - "description": "Invalid access" - }, - "404": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error404" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, "description": "Not found" }, - "409": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error409" - } - } - }, - "description": "Conflict" - }, "429": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error429" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, "description": "Too many requests" } }, - "summary": "Update project", - "tags": ["Projects"] + "summary": "Update tag", + "tags": ["tags"] }, "delete": { - "description": "Deletes a project. After a project is deleted, all boards and users that belong to the project remain in the team.

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.

", - "operationId": "enterprise-delete-project", + "description": "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
", + "operationId": "delete-tag", "parameters": [ { - "name": "org_id", - "description": "The ID of the organization from which you want to delete a project.", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "example": "3074457345618265000" - }, - { - "name": "team_id", - "description": "The ID of the team from which you want to delete a project.", + "description": "Unique identifier (ID) of the board where you want to delete a specific tag.", "in": "path", + "name": "board_id", "required": true, "schema": { "type": "string" - }, - "example": "3074457345619012000" + } }, { - "name": "project_id", - "description": "The ID of the project that you want to delete.", + "description": "Unique identifier (ID) of the tag that you want to delete.", "in": "path", + "name": "tag_id", "required": true, "schema": { "type": "string" - }, - "example": "3074457345618265000" + } } ], "responses": { "204": { - "description": "Project deleted" - }, - "400": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error400" - } - } - }, - "description": "Malformed request" - }, - "401": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error401" + "type": "object" } } }, - "description": "Invalid authentication credentials" + "description": "Tag deleted" }, - "403": { + "400": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error403" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, - "description": "Invalid access" + "description": "Malformed request" }, "404": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error404" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, "description": "Not found" }, - "409": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error409" - } - } - }, - "description": "Conflict" - }, "429": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error429" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, "description": "Too many requests" } }, - "summary": "Delete project", - "tags": ["Projects"] + "summary": "Delete tag", + "tags": ["tags"] } }, - "/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/settings": { + "/v2/boards/{board_id_PlatformTags}/items": { "get": { - "description": "Retrieves the project settings.

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.

", - "operationId": "enterprise-get-project-settings", + "description": "Retrieves all the items that have the specified tag.

Required scope

boards:read

Rate limiting

Level 1
", + "operationId": "get-items-by-tag", "parameters": [ { - "name": "org_id", - "description": "The ID of the organization to which the project belongs.", - "in": "path", - "required": true, + "in": "query", + "name": "limit", "schema": { - "type": "string" - }, - "example": "3074457345618265000" + "type": "string", + "description": "The maximum number of items that can be returned for a single request.\nDefault: `20`.", + "maximum": 50, + "minimum": 1 + } }, { - "name": "team_id", - "description": "The ID of the team to which the project belongs.", + "in": "query", + "name": "offset", + "schema": { + "type": "string", + "description": "The displacement of the first item in the collection to return.\nDefault: `0`." + } + }, + { + "description": "Unique identifier (ID) of the board where you want to retrieve a specific tag.", "in": "path", + "name": "board_id_PlatformTags", "required": true, "schema": { "type": "string" - }, - "example": "3074457345619012091" + } }, { - "name": "project_id", - "description": "The ID of the project for which you want to retrieve the project settings.", - "in": "path", + "description": "Unique identifier (ID) of the tag that you want to retrieve.", + "in": "query", + "name": "tag_id", "required": true, "schema": { "type": "string" - }, - "example": "3074457345618265000" + } } ], "responses": { @@ -10872,47 +10939,73 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectSettings" + "$ref": "#/components/schemas/ItemPagedResponse" } } }, - "description": "Defines the sharing policies for the boards within the project." + "description": "Item with certain tag" }, "400": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error400" - } - } - }, - "description": "Malformed request" - }, - "401": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error401" - } - } - }, - "description": "Invalid authentication credentials" - }, - "403": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error403" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, - "description": "Invalid access" + "description": "Malformed request" }, "404": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error404" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, @@ -10922,178 +11015,365 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error429" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, "description": "Too many requests" } }, - "summary": "Get project settings", - "tags": ["Project Settings"] - }, - "patch": { - "description": "Updates the settings of a project.

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.

", - "operationId": "enterprise-update-project-settings", + "summary": "Get items by tag", + "tags": ["tags"] + } + }, + "/v2/boards/{board_id_PlatformTags}/items/{item_id}": { + "post": { + "description": "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
", + "operationId": "attach-tag-to-item", "parameters": [ { - "name": "org_id", - "description": "The ID of the organization to which the project belongs.", + "description": "Unique identifier (ID) of the board with the item that you want to add a tag to.", "in": "path", + "name": "board_id_PlatformTags", "required": true, "schema": { "type": "string" - }, - "example": "3074457345618265000" + } }, { - "name": "team_id", - "description": "The ID of the team to which the project belongs.", + "description": "Unique identifier (ID) of the item to which you want to add a tag.", "in": "path", + "name": "item_id", "required": true, "schema": { "type": "string" - }, - "example": "3074457345619012000" + } }, { - "name": "project_id", - "description": "The ID of the project whose settings you want to update.", - "in": "path", + "description": "Unique identifier (ID) of the tag you want to add to the item.", + "in": "query", + "name": "tag_id", "required": true, "schema": { "type": "string" - }, - "example": "3074457345618265000" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateProjectSettingsRequest" - } - } - }, - "required": true - }, "responses": { - "200": { + "204": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectSettings" + "type": "object" } } }, - "description": "Project object" + "description": "Add a tag to an item" }, "400": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error400" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, "description": "Malformed request" }, - "401": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error401" - } - } - }, - "description": "Invalid authentication credentials" - }, - "403": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error403" - } - } - }, - "description": "Invalid access" - }, "404": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error404" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, "description": "Not found" }, - "409": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error409" - } - } - }, - "description": "Conflict" - }, "429": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error429" + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } } } }, "description": "Too many requests" } }, - "summary": "Update project settings", - "tags": ["Project Settings"] - } - }, - "/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/members": { - "post": { - "description": "Add a Miro user to a project.

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.

", - "operationId": "enterprise-add-project-member", + "summary": "Attach tag to item", + "tags": ["tags"] + }, + "delete": { + "description": "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
", + "operationId": "remove-tag-from-item", "parameters": [ { - "name": "org_id", - "description": "The ID of the organization to which the project belongs.", + "description": "Unique identifier (ID) of the board with the item that you want to remove a tag from.", "in": "path", + "name": "board_id_PlatformTags", "required": true, "schema": { "type": "string" - }, - "example": "3074457345618265000" + } }, { - "name": "team_id", - "description": "The ID of the team to which the project belongs.", + "description": "Unique identifier (ID) of the item that you want to remove the tag from.", "in": "path", + "name": "item_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Unique identifier (ID) of the tag that you want to remove from the item.", + "in": "query", + "name": "tag_id", "required": true, "schema": { "type": "string" + } + } + ], + "responses": { + "204": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } }, - "example": "3074457345619012000" + "description": "Tag removed from an item" + }, + "400": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } + } + } + }, + "description": "Malformed request" + }, + "404": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } + } + } + }, + "description": "Not found" }, + "429": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of the error", + "example": "error" + }, + "message": { + "type": "string", + "description": "Description of the error", + "example": "Error message" + }, + "status": { + "type": "integer", + "format": "int32", + "description": "Status code of the error", + "example": 400 + }, + "type": { + "type": "string", + "description": "Type of the error", + "example": "error" + } + } + } + } + }, + "description": "Too many requests" + } + }, + "summary": "Remove tag from item", + "tags": ["tags"] + } + }, + "/v2/orgs/{org_id}/teams/{team_id}/projects": { + "post": { + "description": "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.

", + "operationId": "enterprise-create-project", + "parameters": [ { - "name": "project_id", - "description": "The ID of the project to which you want to add a user.", + "name": "org_id", + "description": "The ID of the organization within which you you want to create a project.", "in": "path", "required": true, "schema": { "type": "string" }, "example": "3074457345618265000" + }, + { + "name": "team_id", + "description": "The ID of the team within which you you want to create a project.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345619012000" } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AddProjectMemberRequest" + "$ref": "#/components/schemas/CreateProjectRequest" } } }, @@ -11104,11 +11384,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMember" + "$ref": "#/components/schemas/Project" } } }, - "description": "Project object" + "description": "Contains information about the project, such as the project name." }, "400": { "content": { @@ -11171,16 +11451,16 @@ "description": "Too many requests" } }, - "summary": "Add member in a project", - "tags": ["Project Members"] + "summary": "Create project", + "tags": ["Projects"] }, "get": { - "description": "Retrieves the list of members for a specific project.

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.

", - "operationId": "enterprise-get-project-members", + "description": "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.

", + "operationId": "enterprise-get-projects", "parameters": [ { "name": "org_id", - "description": "The ID of the organization to which the project belongs.", + "description": "The ID of the organization from which you want to retrieve the list of available projects.", "in": "path", "required": true, "schema": { @@ -11190,7 +11470,7 @@ }, { "name": "team_id", - "description": "The ID of the team to which the project belongs.", + "description": "The ID of the team from which you want to retrieve the list of available projects.", "in": "path", "required": true, "schema": { @@ -11198,19 +11478,9 @@ }, "example": "3074457345619012000" }, - { - "name": "project_id", - "description": "The ID of the project for which you want to retrieve the list of members.", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "example": "3074457345618265000" - }, { "name": "limit", - "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.", + "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.", "in": "query", "schema": { "type": "integer", @@ -11236,11 +11506,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMemberPage" + "$ref": "#/components/schemas/ProjectPage" } } }, - "description": "Page of project member" + "description": "Contains the result set information, such as the content, limit, cursor, or size." }, "400": { "content": { @@ -11282,16 +11552,6 @@ }, "description": "Not found" }, - "409": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error409" - } - } - }, - "description": "Conflict" - }, "429": { "content": { "application/json": { @@ -11303,18 +11563,18 @@ "description": "Too many requests" } }, - "summary": "List of project members", - "tags": ["Project Members"] + "summary": "List of projects", + "tags": ["Projects"] } }, - "/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/members/{member_id}": { + "/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}": { "get": { - "description": "Retrieves information for a specific project member.

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.

", - "operationId": "enterprise-get-project-member", + "description": "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.

", + "operationId": "enterprise-get-project", "parameters": [ { "name": "org_id", - "description": "The ID of the organization to which the project belongs.", + "description": "The ID of the organization from which you want to retrieve the project information.", "in": "path", "required": true, "schema": { @@ -11324,7 +11584,7 @@ }, { "name": "team_id", - "description": "The ID of the team to which the project belongs.", + "description": "The ID of the team from which you want to retrieve the project information.", "in": "path", "required": true, "schema": { @@ -11334,23 +11594,13 @@ }, { "name": "project_id", - "description": "The ID of the project from which you want to retrieve specific member information.", + "description": "The ID of the project for which you want to retrieve the information.", "in": "path", "required": true, "schema": { "type": "string" }, "example": "3074457345618265000" - }, - { - "name": "member_id", - "description": "The ID of the member for which you want to retrieve information.", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "example": "307445734562315000" } ], "responses": { @@ -11358,11 +11608,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMember" + "$ref": "#/components/schemas/Project" } } }, - "description": "Contains information about the project member, such as the member's role." + "description": "Project object" }, "400": { "content": { @@ -11404,16 +11654,6 @@ }, "description": "Not found" }, - "409": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error409" - } - } - }, - "description": "Conflict" - }, "429": { "content": { "application/json": { @@ -11425,16 +11665,16 @@ "description": "Too many requests" } }, - "summary": "Get project member", - "tags": ["Project Members"] + "summary": "Get project", + "tags": ["Projects"] }, "patch": { - "description": "Updates details of a project member, such as the member's role.

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.

", - "operationId": "enterprise-update-project-member", + "description": "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.

", + "operationId": "enterprise-update-project", "parameters": [ { "name": "org_id", - "description": "The ID of the organization to which the project member belongs.", + "description": "The ID of an Organization.", "in": "path", "required": true, "schema": { @@ -11444,7 +11684,7 @@ }, { "name": "team_id", - "description": "The ID of the team to which the project member belongs.", + "description": "The ID of a Team.", "in": "path", "required": true, "schema": { @@ -11461,23 +11701,13 @@ "type": "string" }, "example": "3074457345618265000" - }, - { - "name": "member_id", - "description": "The ID of the member whose details you want to update.", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "example": "307445734562315000" } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateProjectMemberRequest" + "$ref": "#/components/schemas/UpdateProjectRequest" } } }, @@ -11488,11 +11718,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectMember" + "$ref": "#/components/schemas/Project" } } }, - "description": "Contains information about the project member, such as the member's role." + "description": "Project object" }, "400": { "content": { @@ -11555,16 +11785,16 @@ "description": "Too many requests" } }, - "summary": "Update project member", - "tags": ["Project Members"] + "summary": "Update project", + "tags": ["Projects"] }, "delete": { - "description": "Remove a member from a project. The user remains in the team even after the member is removed from a project.

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.

", - "operationId": "enterprise-delete-project-member", + "description": "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.

", + "operationId": "enterprise-delete-project", "parameters": [ { "name": "org_id", - "description": "The ID of the organization to which the project belongs.", + "description": "The ID of the organization from which you want to delete a project.", "in": "path", "required": true, "schema": { @@ -11574,7 +11804,7 @@ }, { "name": "team_id", - "description": "The ID of the team to which the project belongs.", + "description": "The ID of the team from which you want to delete a project.", "in": "path", "required": true, "schema": { @@ -11584,17 +11814,7 @@ }, { "name": "project_id", - "description": "The ID of the project from which you want to remove a member.", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "example": "3074457345618265000" - }, - { - "name": "member_id", - "description": "The ID of the member that you want to remove from a project.", + "description": "The ID of the project that you want to delete.", "in": "path", "required": true, "schema": { @@ -11605,7 +11825,7 @@ ], "responses": { "204": { - "description": "Project member removed" + "description": "Project deleted" }, "400": { "content": { @@ -11668,187 +11888,151 @@ "description": "Too many requests" } }, - "summary": "Remove project member", - "tags": ["Project Members"] + "summary": "Delete project", + "tags": ["Projects"] } }, - "/v2/orgs/{org_id}/teams": { - "post": { - "description": "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.

", - "operationId": "enterprise-create-team", - "parameters": [ - { - "$ref": "#/components/parameters/pathOrgId" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateTeamRequest" - } - } - }, - "required": true - }, - "responses": { - "201": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Team" - } - } - }, - "description": "Team object" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "summary": "Create team", - "tags": ["Teams"] - }, + "/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/settings": { "get": { - "description": "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.

", - "operationId": "enterprise-get-teams", + "description": "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.

", + "operationId": "enterprise-get-project-settings", "parameters": [ { - "$ref": "#/components/parameters/pathOrgId" - }, - { - "name": "limit", - "in": "query", + "name": "org_id", + "description": "The ID of the organization to which the project belongs.", + "in": "path", + "required": true, "schema": { - "maximum": 100, - "minimum": 1, - "type": "integer", - "description": "Limit for the number of teams returned in the result list.", - "format": "int32", - "example": 100, - "default": 100 - } + "type": "string" + }, + "example": "3074457345618265000" }, { - "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.", - "example": "3055557345821140500", - "in": "query", - "name": "cursor", + "name": "team_id", + "description": "The ID of the team to which the project belongs.", + "in": "path", + "required": true, "schema": { "type": "string" - } + }, + "example": "3074457345619012091" }, { - "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\".", - "example": "My team", - "in": "query", - "name": "name", + "name": "project_id", + "description": "The ID of the project for which you want to retrieve the project settings.", + "in": "path", + "required": true, "schema": { "type": "string" - } + }, + "example": "3074457345618265000" } ], "responses": { "200": { - "description": "Page of teams that match the search query.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TeamsPage" + "$ref": "#/components/schemas/ProjectSettings" } } - } + }, + "description": "Defines the sharing policies for the boards within the project." }, "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "summary": "List teams", - "tags": ["Teams"] - } - }, - "/v2/orgs/{org_id}/teams/{team_id}": { - "get": { - "description": "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.

", - "operationId": "enterprise-get-team", - "parameters": [ - { - "$ref": "#/components/parameters/pathOrgId" - }, - { - "$ref": "#/components/parameters/pathTeamId" - } - ], - "responses": { - "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Team" + "$ref": "#/components/schemas/Error400" } } }, - "description": "Team object" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Malformed request" }, "401": { - "$ref": "#/components/responses/401" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error401" + } + } + }, + "description": "Invalid authentication credentials" }, "403": { - "$ref": "#/components/responses/403" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error403" + } + } + }, + "description": "Invalid access" }, "404": { - "$ref": "#/components/responses/404" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error404" + } + } + }, + "description": "Not found" }, "429": { - "$ref": "#/components/responses/429" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error429" + } + } + }, + "description": "Too many requests" } }, - "summary": "Get team", - "tags": ["Teams"] + "summary": "Get project settings", + "tags": ["Project Settings"] }, "patch": { - "description": "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.

", - "operationId": "enterprise-update-team", + "description": "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.

", + "operationId": "enterprise-update-project-settings", "parameters": [ { - "$ref": "#/components/parameters/pathOrgId" + "name": "org_id", + "description": "The ID of the organization to which the project belongs.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345618265000" }, { - "$ref": "#/components/parameters/pathTeamId" + "name": "team_id", + "description": "The ID of the team to which the project belongs.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345619012000" + }, + { + "name": "project_id", + "description": "The ID of the project whose settings you want to update.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345618265000" } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TeamChanges" + "$ref": "#/components/schemas/UpdateProjectSettingsRequest" } } }, @@ -11859,83 +12043,118 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Team" + "$ref": "#/components/schemas/ProjectSettings" } } }, - "description": "Team object" + "description": "Project object" }, "400": { - "$ref": "#/components/responses/400" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error400" + } + } + }, + "description": "Malformed request" }, "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "429": { - "$ref": "#/components/responses/429" - } - }, - "summary": "Update team", - "tags": ["Teams"] - }, - "delete": { - "description": "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.

", - "operationId": "enterprise-delete-team", - "parameters": [ - { - "$ref": "#/components/parameters/pathOrgId" - }, - { - "$ref": "#/components/parameters/pathTeamId" - } - ], - "responses": { - "204": { - "description": "Team deleted" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error401" + } + } + }, + "description": "Invalid authentication credentials" }, "403": { - "$ref": "#/components/responses/403" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error403" + } + } + }, + "description": "Invalid access" }, "404": { - "$ref": "#/components/responses/404" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error404" + } + } + }, + "description": "Not found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error409" + } + } + }, + "description": "Conflict" }, "429": { - "$ref": "#/components/responses/429" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error429" + } + } + }, + "description": "Too many requests" } }, - "summary": "Delete team", - "tags": ["Teams"] + "summary": "Update project settings", + "tags": ["Project Settings"] } }, - "/v2/orgs/{org_id}/teams/{team_id}/members": { + "/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/members": { "post": { - "description": "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.

", - "operationId": "enterprise-invite-team-member", + "description": "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.

", + "operationId": "enterprise-add-project-member", "parameters": [ { - "$ref": "#/components/parameters/pathOrgId" + "name": "org_id", + "description": "The ID of the organization to which the project belongs.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345618265000" }, { - "$ref": "#/components/parameters/pathTeamId" + "name": "team_id", + "description": "The ID of the team to which the project belongs.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345619012000" + }, + { + "name": "project_id", + "description": "The ID of the project to which you want to add a user.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345618265000" } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TeamMemberInvite" + "$ref": "#/components/schemas/AddProjectMemberRequest" } } }, @@ -11946,119 +12165,253 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TeamMember" + "$ref": "#/components/schemas/ProjectMember" } } }, - "description": "Invitation result object" + "description": "Project object" }, "400": { - "$ref": "#/components/responses/400" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error400" + } + } + }, + "description": "Malformed request" }, "401": { - "$ref": "#/components/responses/401" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error401" + } + } + }, + "description": "Invalid authentication credentials" }, "403": { - "$ref": "#/components/responses/403" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error403" + } + } + }, + "description": "Invalid access" }, "404": { - "$ref": "#/components/responses/404" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error404" + } + } + }, + "description": "Not found" }, "409": { - "$ref": "#/components/responses/409" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error409" + } + } + }, + "description": "Conflict" }, "429": { - "$ref": "#/components/responses/429" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error429" + } + } + }, + "description": "Too many requests" } }, - "summary": "Invite team members", - "tags": ["Team Members"] + "summary": "Add member in a project", + "tags": ["Project Members"] }, "get": { - "description": "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.

", - "operationId": "enterprise-get-team-members", + "description": "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.

", + "operationId": "enterprise-get-project-members", "parameters": [ { - "$ref": "#/components/parameters/pathOrgId" + "name": "org_id", + "description": "The ID of the organization to which the project belongs.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345618265000" }, { - "$ref": "#/components/parameters/pathTeamId" + "name": "team_id", + "description": "The ID of the team to which the project belongs.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345619012000" + }, + { + "name": "project_id", + "description": "The ID of the project for which you want to retrieve the list of members.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345618265000" }, { "name": "limit", + "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.", "in": "query", "schema": { - "maximum": 100, - "minimum": 1, "type": "integer", - "description": "Limit for the number of team members returned in the result list.", "format": "int32", - "example": 100, + "minimum": 1, + "maximum": 100, "default": 100 - } + }, + "example": 100 }, { - "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.", - "example": "3055557345821140500", - "in": "query", "name": "cursor", - "schema": { - "type": "string" - } - }, - { - "description": "\nRole query. Filters members by role using full word match. Accepted values are:\n* \"member\": Team member with full member permissions.\n* \"admin\": Admin of a team. Team member with permission to manage team.\n* \"non_team\": External user, non-team user.\n* \"team_guest\": Team-guest user, user with access only to a team without access to organization.\n", + "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.", "in": "query", - "name": "role", "schema": { "type": "string" - } + }, + "example": "3074457345618265000" } ], "responses": { "200": { - "description": "Page of team members that match the search query.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TeamMembersPage" + "$ref": "#/components/schemas/ProjectMemberPage" } } - } + }, + "description": "Page of project member" }, "400": { - "$ref": "#/components/responses/400" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error400" + } + } + }, + "description": "Malformed request" }, "401": { - "$ref": "#/components/responses/401" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error401" + } + } + }, + "description": "Invalid authentication credentials" }, "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "429": { - "$ref": "#/components/responses/429" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error403" + } + } + }, + "description": "Invalid access" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error404" + } + } + }, + "description": "Not found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error409" + } + } + }, + "description": "Conflict" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error429" + } + } + }, + "description": "Too many requests" } }, - "summary": "List team members", - "tags": ["Team Members"] + "summary": "List of project members", + "tags": ["Project Members"] } }, - "/v2/orgs/{org_id}/teams/{team_id}/members/{member_id}": { + "/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/members/{member_id}": { "get": { - "description": "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.

", - "operationId": "enterprise-get-team-member", + "description": "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.

", + "operationId": "enterprise-get-project-member", "parameters": [ { - "$ref": "#/components/parameters/pathOrgId" + "name": "org_id", + "description": "The ID of the organization to which the project belongs.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345618265000" }, { - "$ref": "#/components/parameters/pathTeamId" + "name": "team_id", + "description": "The ID of the team to which the project belongs.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345619012000" }, { - "$ref": "#/components/parameters/pathTeamMemberId" + "name": "project_id", + "description": "The ID of the project from which you want to retrieve specific member information.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345618265000" + }, + { + "name": "member_id", + "description": "The ID of the member for which you want to retrieve information.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "307445734562315000" } ], "responses": { @@ -12066,50 +12419,126 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TeamMember" + "$ref": "#/components/schemas/ProjectMember" } } }, - "description": "Team member object" + "description": "Contains information about the project member, such as the member's role." }, "400": { - "$ref": "#/components/responses/400" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error400" + } + } + }, + "description": "Malformed request" }, "401": { - "$ref": "#/components/responses/401" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error401" + } + } + }, + "description": "Invalid authentication credentials" }, "403": { - "$ref": "#/components/responses/403" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error403" + } + } + }, + "description": "Invalid access" }, "404": { - "$ref": "#/components/responses/404" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error404" + } + } + }, + "description": "Not found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error409" + } + } + }, + "description": "Conflict" }, "429": { - "$ref": "#/components/responses/429" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error429" + } + } + }, + "description": "Too many requests" } }, - "summary": "Get team member", - "tags": ["Team Members"] + "summary": "Get project member", + "tags": ["Project Members"] }, "patch": { - "description": "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.

", - "operationId": "enterprise-update-team-member", + "description": "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.

", + "operationId": "enterprise-update-project-member", "parameters": [ { - "$ref": "#/components/parameters/pathOrgId" + "name": "org_id", + "description": "The ID of the organization to which the project member belongs.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345618265000" }, { - "$ref": "#/components/parameters/pathTeamId" + "name": "team_id", + "description": "The ID of the team to which the project member belongs.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345619012000" }, { - "$ref": "#/components/parameters/pathTeamMemberId" + "name": "project_id", + "description": "The ID of a Project.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345618265000" + }, + { + "name": "member_id", + "description": "The ID of the member whose details you want to update.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "307445734562315000" } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TeamMemberChanges" + "$ref": "#/components/schemas/UpdateProjectMemberRequest" } } }, @@ -12120,51 +12549,219 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TeamMember" + "$ref": "#/components/schemas/ProjectMember" } } }, - "description": "Team member object" + "description": "Contains information about the project member, such as the member's role." }, "400": { - "$ref": "#/components/responses/400" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error400" + } + } + }, + "description": "Malformed request" }, "401": { - "$ref": "#/components/responses/401" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error401" + } + } + }, + "description": "Invalid authentication credentials" }, "403": { - "$ref": "#/components/responses/403" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error403" + } + } + }, + "description": "Invalid access" }, "404": { - "$ref": "#/components/responses/404" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error404" + } + } + }, + "description": "Not found" }, "409": { - "$ref": "#/components/responses/409" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error409" + } + } + }, + "description": "Conflict" }, "429": { - "$ref": "#/components/responses/429" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error429" + } + } + }, + "description": "Too many requests" } }, - "summary": "Update team member", - "tags": ["Team Members"] + "summary": "Update project member", + "tags": ["Project Members"] }, "delete": { - "description": "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.

", - "operationId": "enterprise-delete-team-member", + "description": "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.

", + "operationId": "enterprise-delete-project-member", "parameters": [ { - "$ref": "#/components/parameters/pathOrgId" - }, - { - "$ref": "#/components/parameters/pathTeamId" + "name": "org_id", + "description": "The ID of the organization to which the project belongs.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345618265000" }, { - "$ref": "#/components/parameters/pathTeamMemberId" + "name": "team_id", + "description": "The ID of the team to which the project belongs.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345619012000" + }, + { + "name": "project_id", + "description": "The ID of the project from which you want to remove a member.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345618265000" + }, + { + "name": "member_id", + "description": "The ID of the member that you want to remove from a project.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345618265000" } ], "responses": { "204": { - "description": "Deleted successfully" + "description": "Project member removed" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error400" + } + } + }, + "description": "Malformed request" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error401" + } + } + }, + "description": "Invalid authentication credentials" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error403" + } + } + }, + "description": "Invalid access" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error404" + } + } + }, + "description": "Not found" + }, + "409": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error409" + } + } + }, + "description": "Conflict" + }, + "429": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error429" + } + } + }, + "description": "Too many requests" + } + }, + "summary": "Remove project member", + "tags": ["Project Members"] + } + }, + "/v2/orgs/{org_id}/teams": { + "post": { + "description": "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.

", + "operationId": "enterprise-create-team", + "parameters": [ + { + "$ref": "#/components/parameters/pathOrgId" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTeamRequest" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Team" + } + } + }, + "description": "Team object" }, "400": { "$ref": "#/components/responses/400" @@ -12178,28 +12775,47 @@ "404": { "$ref": "#/components/responses/404" }, - "409": { - "$ref": "#/components/responses/409" - }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Delete team member from team", - "tags": ["Team Members"] - } - }, - "/v2/orgs/{org_id}/default_teams_settings": { + "summary": "Create team", + "tags": ["Teams"] + }, "get": { - "description": "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.

", - "operationId": "enterprise-get-default-team-settings", + "description": "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.

", + "operationId": "enterprise-get-teams", "parameters": [ { - "description": "The id of an Organization.", - "example": "3074457345618265000", - "in": "path", - "name": "org_id", - "required": true, + "$ref": "#/components/parameters/pathOrgId" + }, + { + "name": "limit", + "in": "query", + "schema": { + "maximum": 100, + "minimum": 1, + "type": "integer", + "description": "Limit for the number of teams returned in the result list.", + "format": "int32", + "example": 100, + "default": 100 + } + }, + { + "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.", + "example": "3055557345821140500", + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + } + }, + { + "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\".", + "example": "My team", + "in": "query", + "name": "name", "schema": { "type": "string" } @@ -12207,14 +12823,14 @@ ], "responses": { "200": { + "description": "Page of teams that match the search query.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TeamSettings" + "$ref": "#/components/schemas/TeamsPage" } } - }, - "description": "Team settings" + } }, "400": { "$ref": "#/components/responses/400" @@ -12232,14 +12848,14 @@ "$ref": "#/components/responses/429" } }, - "summary": "Get default team settings", - "tags": ["Team Settings"] + "summary": "List teams", + "tags": ["Teams"] } }, - "/v2/orgs/{org_id}/teams/{team_id}/settings": { + "/v2/orgs/{org_id}/teams/{team_id}": { "get": { - "description": "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.

", - "operationId": "enterprise-get-team-settings", + "description": "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.

", + "operationId": "enterprise-get-team", "parameters": [ { "$ref": "#/components/parameters/pathOrgId" @@ -12253,11 +12869,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TeamSettings" + "$ref": "#/components/schemas/Team" } } }, - "description": "Team settings" + "description": "Team object" }, "400": { "$ref": "#/components/responses/400" @@ -12275,12 +12891,12 @@ "$ref": "#/components/responses/429" } }, - "summary": "Get team settings", - "tags": ["Team Settings"] + "summary": "Get team", + "tags": ["Teams"] }, "patch": { - "description": "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.

", - "operationId": "enterprise-update-team-settings", + "description": "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.

", + "operationId": "enterprise-update-team", "parameters": [ { "$ref": "#/components/parameters/pathOrgId" @@ -12293,7 +12909,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TeamSettingsChanges" + "$ref": "#/components/schemas/TeamChanges" } } }, @@ -12304,11 +12920,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TeamSettings" + "$ref": "#/components/schemas/Team" } } }, - "description": "Team settings" + "description": "Team object" }, "400": { "$ref": "#/components/responses/400" @@ -12322,925 +12938,2025 @@ "404": { "$ref": "#/components/responses/404" }, - "409": { - "$ref": "#/components/responses/409" - }, "429": { "$ref": "#/components/responses/429" } }, - "summary": "Update team settings", - "tags": ["Team Settings"] - } - } - }, - "components": { - "schemas": { - "AuditPage": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Type of the response, in this case it's always 'cursor-list'", - "example": "cursor-list" + "summary": "Update team", + "tags": ["Teams"] + }, + "delete": { + "description": "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.

", + "operationId": "enterprise-delete-team", + "parameters": [ + { + "$ref": "#/components/parameters/pathOrgId" }, - "limit": { - "type": "integer", - "description": "Page limit", - "example": 10 + { + "$ref": "#/components/parameters/pathTeamId" + } + ], + "responses": { + "204": { + "description": "Team deleted" }, - "size": { - "type": "integer", - "description": "Item count in current page", - "example": 2 + "400": { + "$ref": "#/components/responses/400" }, - "cursor": { + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Delete team", + "tags": ["Teams"] + } + }, + "/v2/orgs/{org_id}/teams/{team_id}/members": { + "post": { + "description": "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.

", + "operationId": "enterprise-invite-team-member", + "parameters": [ + { + "$ref": "#/components/parameters/pathOrgId" + }, + { + "$ref": "#/components/parameters/pathTeamId" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamMemberInvite" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamMember" + } + } + }, + "description": "Invitation result object" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "409": { + "$ref": "#/components/responses/409" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Invite team members", + "tags": ["Team Members"] + }, + "get": { + "description": "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.

", + "operationId": "enterprise-get-team-members", + "parameters": [ + { + "$ref": "#/components/parameters/pathOrgId" + }, + { + "$ref": "#/components/parameters/pathTeamId" + }, + { + "name": "limit", + "in": "query", + "schema": { + "maximum": 100, + "minimum": 1, + "type": "integer", + "description": "Limit for the number of team members returned in the result list.", + "format": "int32", + "example": 100, + "default": 100 + } + }, + { + "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.", + "example": "3055557345821140500", + "in": "query", + "name": "cursor", + "schema": { + "type": "string" + } + }, + { + "description": "\nRole query. Filters members by role using full word match. Accepted values are:\n* \"member\": Team member with full member permissions.\n* \"admin\": Admin of a team. Team member with permission to manage team.\n* \"non_team\": External user, non-team user.\n* \"team_guest\": (Deprecated) Team-guest user, user with access only to a team without access to organization.\n", + "in": "query", + "name": "role", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Page of team members that match the search query.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamMembersPage" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "List team members", + "tags": ["Team Members"] + } + }, + "/v2/orgs/{org_id}/teams/{team_id}/members/{member_id}": { + "get": { + "description": "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.

", + "operationId": "enterprise-get-team-member", + "parameters": [ + { + "$ref": "#/components/parameters/pathOrgId" + }, + { + "$ref": "#/components/parameters/pathTeamId" + }, + { + "$ref": "#/components/parameters/pathTeamMemberId" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamMember" + } + } + }, + "description": "Team member object" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Get team member", + "tags": ["Team Members"] + }, + "patch": { + "description": "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.

", + "operationId": "enterprise-update-team-member", + "parameters": [ + { + "$ref": "#/components/parameters/pathOrgId" + }, + { + "$ref": "#/components/parameters/pathTeamId" + }, + { + "$ref": "#/components/parameters/pathTeamMemberId" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamMemberChanges" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamMember" + } + } + }, + "description": "Team member object" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "409": { + "$ref": "#/components/responses/409" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Update team member", + "tags": ["Team Members"] + }, + "delete": { + "description": "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.

", + "operationId": "enterprise-delete-team-member", + "parameters": [ + { + "$ref": "#/components/parameters/pathOrgId" + }, + { + "$ref": "#/components/parameters/pathTeamId" + }, + { + "$ref": "#/components/parameters/pathTeamMemberId" + } + ], + "responses": { + "204": { + "description": "Deleted successfully" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "409": { + "$ref": "#/components/responses/409" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Delete team member from team", + "tags": ["Team Members"] + } + }, + "/v2/orgs/{org_id}/default_teams_settings": { + "get": { + "description": "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.

", + "operationId": "enterprise-get-default-team-settings", + "parameters": [ + { + "description": "The id of an Organization.", + "example": "3074457345618265000", + "in": "path", + "name": "org_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamSettings" + } + } + }, + "description": "Team settings" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Get default team settings", + "tags": ["Team Settings"] + } + }, + "/v2/orgs/{org_id}/teams/{team_id}/settings": { + "get": { + "description": "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.

", + "operationId": "enterprise-get-team-settings", + "parameters": [ + { + "$ref": "#/components/parameters/pathOrgId" + }, + { + "$ref": "#/components/parameters/pathTeamId" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamSettings" + } + } + }, + "description": "Team settings" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Get team settings", + "tags": ["Team Settings"] + }, + "patch": { + "description": "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.

", + "operationId": "enterprise-update-team-settings", + "parameters": [ + { + "$ref": "#/components/parameters/pathOrgId" + }, + { + "$ref": "#/components/parameters/pathTeamId" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamSettingsChanges" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamSettings" + } + } + }, + "description": "Team settings" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "409": { + "$ref": "#/components/responses/409" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "summary": "Update team settings", + "tags": ["Team Settings"] + } + } + }, + "components": { + "schemas": { + "AuditPage": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Type of the response, in this case it's always 'cursor-list'", + "example": "cursor-list" + }, + "limit": { + "type": "integer", + "description": "Page limit", + "example": 10 + }, + "size": { + "type": "integer", + "description": "Item count in current page", + "example": 2 + }, + "cursor": { + "type": "string", + "description": "The key that should be used as the cursor request parameter to fetch the next page", + "example": "2023-09-01T09:30:10.840687Z#1234567890123456789-DDB" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEvent" + }, + "description": "Audit events list" + } + } + }, + "AuditEvent": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Audit event id", + "example": "2023-09-01T09:30:10.840687Z#1234567890123456789-DDB" + }, + "context": { + "$ref": "#/components/schemas/AuditContext" + }, + "object": { + "$ref": "#/components/schemas/AuditObject" + }, + "createdAt": { + "type": "string", + "description": "Time when the audit event has been created", + "format": "date-time", + "example": "2023-09-01T09:30:10.840+0000" + }, + "details": { + "type": "object", + "description": "Details json related to the audit event", + "example": "{ \"authType\": \"SSO\", \"mfaFactorType\": \"NONE\" }" + }, + "createdBy": { + "$ref": "#/components/schemas/AuditCreatedBy" + }, + "event": { + "type": "string", + "description": "Event type of the audit event", + "example": "sign_in_succeeded" + }, + "category": { + "type": "string", + "description": "Event category of the audit event.", + "example": "authentication" + } + } + }, + "AuditContext": { + "type": "object", + "description": "Audit context", + "properties": { + "ip": { + "type": "string", + "description": "Ip address associated with the audit context", + "example": "0.0.0.0" + }, + "team": { + "$ref": "#/components/schemas/AuditTeam" + }, + "organization": { + "$ref": "#/components/schemas/AuditOrganization" + } + } + }, + "AuditTeam": { + "type": "object", + "description": "Team associated with the audit context", + "properties": { + "id": { + "type": "string", + "description": "Id of the team", + "example": "1234567890123456789" + }, + "name": { + "type": "string", + "description": "Name of the team", + "example": "Example Team" + } + } + }, + "AuditOrganization": { + "type": "object", + "description": "Organization associated with the audit context", + "properties": { + "id": { + "type": "string", + "description": "Id of the organization", + "example": "1234567890123456789" + }, + "name": { + "type": "string", + "description": "Name of the organization", + "example": "Example Organization" + } + } + }, + "AuditObject": { + "type": "object", + "description": "The object related with the audit event", + "properties": { + "id": { + "type": "string", + "description": "Id of the object", + "example": "1234567890123456789" + }, + "name": { + "type": "string", + "description": "Name of the object", + "example": "Example Object" + } + } + }, + "AuditCreatedBy": { + "type": "object", + "description": "The details regarding the creator of the audit event", + "properties": { + "type": { + "type": "string", + "description": "Type of the creator", + "example": "user", + "enum": ["user", "application", "scim_provisioner", "miro_automation"] + }, + "id": { + "type": "string", + "description": "Id of the creator", + "example": "1234567890123456789" + }, + "name": { + "type": "string", + "description": "Name of the creator", + "example": "John Smith" + }, + "email": { + "type": "string", + "description": "Email of the creator", + "example": "john.smith@miro.com" + } + } + }, + "BoardDataClassificationLabel": { + "type": "object", + "properties": { + "color": { + "type": "string", + "description": "Label color.", + "example": "blue" + }, + "description": { + "type": "string", + "description": "Label description.", + "example": "Board could not be shared publicly" + }, + "id": { + "type": "string", + "description": "Label id.", + "example": "3000457366756290996" + }, + "name": { + "type": "string", + "description": "Label name.", + "example": "internal" + }, + "sharingRecommendation": { + "type": "string", + "description": "Sharing Recommendation (one of NO_SHARING_RESTRICTIONS, ONLY_WITHIN_ORGANIZATION, ONLY_WITHIN_TEAM or ONLY_WITH_AUTHORIZED_TEAM_MEMBERS ).", + "example": "NO_SHARING_RESTRICTIONS" + }, + "guidelineUrl": { + "type": "string", + "description": "Indicates the URL for the board classification label guidelines.", + "example": "https://miro.com" + }, + "type": { + "type": "string", + "description": "Type of the object returned.", + "default": "board-data-classification-label" + } + } + }, + "DataClassificationLabel": { + "description": "Data classification label", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Label id.", + "example": "3000457366756290996" + }, + "color": { + "type": "string", + "description": "Label color.", + "example": "#F5DC80" + }, + "default": { + "type": "boolean", + "description": "Label is default.", + "example": false + }, + "description": { + "type": "string", + "description": "Label description.", + "example": "Board could not be shared publicly" + }, + "name": { + "type": "string", + "description": "Label name.", + "example": "internal" + }, + "orderNumber": { + "type": "integer", + "description": "Label order number.", + "format": "int32", + "example": 2 + }, + "sharingRecommendation": { + "type": "string", + "description": "Sharing Recommendation (one of NO_SHARING_RESTRICTIONS, ONLY_WITHIN_ORGANIZATION, ONLY_WITHIN_TEAM or ONLY_WITH_AUTHORIZED_TEAM_MEMBERS ).", + "example": "NO_SHARING_RESTRICTIONS" + }, + "guidelineUrl": { + "type": "string", + "description": "Indicates the URL for the board classification label guidelines.", + "example": "https://miro.com" + }, + "type": { + "type": "string", + "description": "Type of the object returned.", + "default": "data-classification-label" + } + } + }, + "DataClassificationLabelId": { + "type": "object", + "properties": { + "labelId": { + "type": "string", + "description": "Data classification label id", + "example": "3000457366756290996" + } + } + }, + "DataClassificationOrganizationSettings": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Data classification enabled for organization", + "example": true + }, + "labels": { + "type": "array", + "description": "Data classification labels", + "items": { + "$ref": "#/components/schemas/DataClassificationLabel" + } + }, + "type": { + "type": "string", + "description": "Type of the object returned.", + "default": "data-classification-organization-settings" + } + } + }, + "DataClassificationTeamSettings": { + "type": "object", + "properties": { + "defaultLabelId": { + "type": "string", + "description": "Data classification default label id", + "example": "3000457366756290996" + }, + "enabled": { + "type": "boolean", + "description": "Data classification enabled for team", + "example": true + }, + "type": { + "type": "string", + "description": "Type of the object returned.", + "default": "team-data-classification-settings" + } + } + }, + "UpdateBoardsDataClassificationLabel": { + "type": "object", + "properties": { + "numberUpdatedBoards": { + "type": "integer", + "description": "Number of boards updated in the team", + "format": "int64", + "example": 10 + }, + "type": { + "type": "string", + "description": "Type of the object returned.", + "default": "boards-data-classification-label-changed" + } + } + }, + "UpdateBoardsDataClassificationLabelRequest": { + "type": "object", + "properties": { + "labelId": { + "type": "integer", + "description": "Data classification label id for team", + "format": "int64", + "example": 3000457366756291000 + }, + "notClassifiedOnly": { + "type": "boolean", + "description": "Assign data classification label to not-classified only or to all boards of team", + "example": true + } + } + }, + "UpdateTeamSettingsRequest": { + "type": "object", + "properties": { + "defaultLabelId": { + "type": "integer", + "description": "Data classification default label id", + "format": "int64", + "example": 3000457366756291000 + }, + "enabled": { + "type": "boolean", + "description": "Data classification enabled for team", + "example": true + } + } + }, + "CaseRequest": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the case.", + "example": "My Case" + }, + "description": { + "type": "string", + "description": "The description of the case.", + "example": "Info about my case" + } + }, + "required": ["name"] + }, + "CaseResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "pattern": "^[0-9]+$", + "description": "Unique identifier of the case.", + "example": "3074457345619012007" + }, + "organizationId": { + "type": "string", + "pattern": "^[0-9]+$", + "description": "Unique identifier of the organization.", + "example": "3074457345618265000" + }, + "name": { + "type": "string", + "description": "The name of the case.", + "example": "My Case" + }, + "description": { + "type": "string", + "description": "The description of the case.", + "example": "Info about my case" + }, + "createdBy": { + "$ref": "#/components/schemas/User" + }, + "lastModifiedBy": { + "$ref": "#/components/schemas/User" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "lastModifiedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": ["createdAt", "createdBy", "id", "lastModifiedAt", "name", "organizationId"] + }, + "LegalHoldRequest": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the legal hold.", + "example": "My legal hold" + }, + "description": { + "type": "string", + "description": "The description of the legal hold.", + "example": "Info about my legal hold" + }, + "scope": { + "$ref": "#/components/schemas/LegalHoldRequestScope" + } + }, + "required": ["name", "scope"] + }, + "LegalHoldRequestScope": { + "description": "The legal hold scope determines the criteria used to put content items under hold. The variants of this field might get extended in the future, although the most common use case is to put users under hold. Currently only the `users` scope is supported. However, the parsing of this field must ignore unexpected variants. The request must always include a list of all users to be placed under hold, whether it's for a new legal hold or an update to an existing one. You can have up to 200 users per legal hold, including users added in legal hold updates.", + "oneOf": [ + { + "$ref": "#/components/schemas/LegalHoldRequestScopeUsers" + } + ] + }, + "LegalHoldRequestScopeUsers": { + "title": "Users", + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email of the user", + "example": "john.smith@example.com" + } + }, + "required": ["email"] + } + } + }, + "required": ["user"] + }, + "LegalHoldResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "pattern": "^[0-9]+$", + "description": "Unique identifier of the legal hold.", + "example": "3074457345618265000" + }, + "organizationId": { + "type": "string", + "pattern": "^[0-9]+$", + "description": "Unique identifier of the organization.", + "example": "3074457345618265000" + }, + "caseId": { + "type": "string", + "pattern": "^[0-9]+$", + "description": "Unique identifier of the case.", + "example": "3074457345618265000" + }, + "name": { + "type": "string", + "description": "The name of the legal hold.", + "example": "My legal hold" + }, + "description": { + "type": "string", + "description": "The description of the legal hold.", + "example": "Info about my legal hold" + }, + "state": { + "$ref": "#/components/schemas/LegalHoldState" + }, + "scope": { + "$ref": "#/components/schemas/LegalHoldResponseScope" + }, + "createdBy": { + "$ref": "#/components/schemas/User" + }, + "lastModifiedBy": { + "$ref": "#/components/schemas/User" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "lastModifiedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "createdAt", + "createdBy", + "id", + "caseId", + "lastModifiedAt", + "name", + "organizationId", + "scope", + "scopeValue", + "state" + ] + }, + "LegalHoldResponseScope": { + "description": "The legal hold scope determines the criteria used to put content items under hold. The variants of this field might get extended in the future, although the most common use case is to put users under hold. Currently only the `users` scope is supported. However, the parsing of this field must ignore unexpected variants.", + "oneOf": [ + { + "$ref": "#/components/schemas/LegalHoldResponseScopeUsers" + } + ] + }, + "LegalHoldResponseScopeUsers": { + "title": "Users scope", + "type": "object", + "description": "List of users under legal hold.", + "properties": { + "users": { + "type": "array", + "minItems": 1, + "maxItems": 200, + "items": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "PaginatedLegalHoldContentItemsResponse": { + "description": "List of content items under legal hold.", + "allOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LegalHoldContentItemsResponse" + } + } + } + } + ] + }, + "LegalHoldContentItemsResponse": { + "type": "object", + "properties": { + "contentId": { "type": "string", - "description": "The key that should be used as the cursor request parameter to fetch the next page", - "example": "2023-09-01T09:30:10.840687Z#1234567890123456789-DDB" + "description": "Identifier for the piece of content referenced by a content item. In the case of a board, this represents the `boardKey` and can be used to export a board using the Discovery APIs.", + "example": "uXjVOD6LSME=" }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AuditEvent" - }, - "description": "Audit events list" + "type": { + "type": "string", + "description": "Type of the content item that is returned.\n", + "example": "board" } - } + }, + "required": ["id", "name", "type"] }, - "AuditEvent": { + "LegalHoldState": { + "type": "string", + "description": "The state of the legal hold. Legal holds could take up to 24 hours to be processed and the state could be one of the following:\n- `PROCESSING`: the legal hold is being created and content items are being processed.\n- `ACTIVE`: the legal hold has been created and all content items have been processed.\n- `DELETING`: the legal hold is being deleted and content items are being processed.\n", + "enum": ["PROCESSING", "ACTIVE", "DELETING"] + }, + "User": { + "description": "User information.", "type": "object", "properties": { "id": { "type": "string", - "description": "Audit event id", - "example": "2023-09-01T09:30:10.840687Z#1234567890123456789-DDB" - }, - "context": { - "$ref": "#/components/schemas/AuditContext" - }, - "object": { - "$ref": "#/components/schemas/AuditObject" + "description": "Unique identifier of the user.", + "example": "3458764517517852417" }, - "createdAt": { + "email": { "type": "string", - "description": "Time when the audit event has been created", - "format": "date-time", - "example": "2023-09-01T09:30:10.840+0000" - }, - "details": { - "type": "object", - "description": "Details json related to the audit event", - "example": "{ \"authType\": \"SSO\", \"mfaFactorType\": \"NONE\" }" - }, - "createdBy": { - "$ref": "#/components/schemas/AuditCreatedBy" + "description": "User email.", + "example": "john.smith@example.com" }, - "event": { + "firstName": { "type": "string", - "description": "Event type of the audit event", - "example": "sign_in_succeeded" + "description": "First name of the user.", + "example": "John" }, - "category": { + "lastName": { "type": "string", - "description": "Event category of the audit event.", - "example": "authentication" + "description": "Last name of the user.", + "example": "Smith" } - } + }, + "required": ["id", "email", "firstName", "lastName"] }, - "AuditContext": { - "type": "object", - "description": "Audit context", - "properties": { - "ip": { - "type": "string", - "description": "Ip address associated with the audit context", - "example": "0.0.0.0" - }, - "team": { - "$ref": "#/components/schemas/AuditTeam" + "PaginatedCaseResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/Pagination" }, - "organization": { - "$ref": "#/components/schemas/AuditOrganization" + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CaseResponse" + } + } + } } - } + ] }, - "AuditTeam": { - "type": "object", - "description": "Team associated with the audit context", - "properties": { - "id": { - "type": "string", - "description": "Id of the team", - "example": "1234567890123456789" + "PaginatedLegalHoldResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/Pagination" }, - "name": { - "type": "string", - "description": "Name of the team", - "example": "Example Team" + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LegalHoldResponse" + } + } + } } - } + ] }, - "AuditOrganization": { - "type": "object", - "description": "Organization associated with the audit context", + "PaginatedCaseExportJobsResponse": { + "description": "Board export job for a case.", "properties": { - "id": { - "type": "string", - "description": "Id of the organization", - "example": "1234567890123456789" + "size": { + "type": "integer", + "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.\n", + "format": "int32", + "example": 1 }, - "name": { - "type": "string", - "description": "Name of the organization", - "example": "Example Organization" - } - } - }, - "AuditObject": { - "type": "object", - "description": "The object related with the audit event", - "properties": { - "id": { - "type": "string", - "description": "Id of the object", - "example": "1234567890123456789" + "cursor": { + "$ref": "#/components/schemas/PageCursor" }, - "name": { + "limit": { + "$ref": "#/components/schemas/PageLimit", + "description": "The maximum number of results to return per call. If the number of items in the response is\ngreater than the limit specified, the response returns the cursor parameter with a value.\n" + }, + "type": { "type": "string", - "description": "Name of the object", - "example": "Example Object" + "description": "Type of the response, in this case it's always 'cursor-list'.", + "default": "cursor-list" + }, + "data": { + "type": "array", + "items": { + "type": "object", + "description": "Board export job.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of the board export job.", + "format": "uuid", + "example": "92343229-c532-446d-b8cb-2f155bedb807" + } + } + } } } }, - "AuditCreatedBy": { + "Pagination": { "type": "object", - "description": "The details regarding the creator of the audit event", "properties": { - "type": { - "type": "string", - "description": "Type of the creator", - "example": "user", - "enum": ["user", "application", "scim_provisioner", "miro_automation"] + "size": { + "type": "integer", + "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.\n", + "format": "int32", + "example": 1 }, - "id": { - "type": "string", - "description": "Id of the creator", - "example": "1234567890123456789" + "total": { + "$ref": "#/components/schemas/PageTotal" }, - "name": { - "type": "string", - "description": "Name of the creator", - "example": "John Smith" + "cursor": { + "$ref": "#/components/schemas/PageCursor" }, - "email": { + "limit": { + "$ref": "#/components/schemas/PageLimit", + "description": "The maximum number of results to return per call. If the number of items in the response is\ngreater than the limit specified, the response returns the cursor parameter with a value.\n" + }, + "type": { "type": "string", - "description": "Email of the creator", - "example": "john.smith@miro.com" + "description": "Type of the response, in this case it's always 'cursor-list'.", + "default": "cursor-list" } } }, - "BoardDataClassificationLabel": { + "PageTotal": { + "type": "integer", + "description": "Total number of results in the collection.", + "format": "int32", + "example": 15 + }, + "BoardExportJobId": { + "required": ["jobId"], "type": "object", "properties": { - "color": { - "type": "string", - "description": "Label color.", - "example": "blue" - }, - "description": { - "type": "string", - "description": "Label description.", - "example": "Board could not be shared publicly" - }, - "id": { - "type": "string", - "description": "Label id.", - "example": "3000457366756290996" - }, - "name": { - "type": "string", - "description": "Label name.", - "example": "internal" - }, - "sharingRecommendation": { + "jobId": { "type": "string", - "description": "Sharing Recommendation (one of NO_SHARING_RESTRICTIONS, ONLY_WITHIN_ORGANIZATION, ONLY_WITHIN_TEAM or ONLY_WITH_AUTHORIZED_TEAM_MEMBERS ).", - "example": "NO_SHARING_RESTRICTIONS" + "description": "Unique identifier of the board export job.", + "format": "uuid", + "example": "92343229-c532-446d-b8cb-2f155bedb807" + } + } + }, + "BoardFormat": { + "type": "string", + "enum": ["SVG", "HTML", "PDF"], + "default": "SVG", + "description": "Specifies the format of the file to which the board will be exported. Supported formats include SVG (default), HTML, and PDF.", + "example": "SVG" + }, + "ExportJobStatus": { + "type": "string", + "description": "Indicates the current state of the board export job.\nPossible values:\n`CREATED`: the job has been created but not yet started. Retry the status call after some time.\n`IN_PROGRESS`: the job is in progress, and the results are not ready yet. Retry the status call after some time.\n`CANCELLED`: the job has been cancelled and will not produce any more results.\n`FINISHED`: the job is complete. You can now get results for the board export job.", + "enum": ["CREATED", "IN_PROGRESS", "CANCELLED", "FINISHED"], + "example": "CREATED" + }, + "BoardExportJobsList": { + "description": "List of export jobs.", + "type": "object", + "properties": { + "total": { + "$ref": "#/components/schemas/PageTotal" }, - "guidelineUrl": { - "type": "string", - "description": "Indicates the URL for the board classification label guidelines.", - "example": "https://miro.com" + "cursor": { + "$ref": "#/components/schemas/PageCursor" }, - "type": { - "type": "string", - "description": "Type of the object returned.", - "default": "board-data-classification-label" + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BoardExportJob" + } } } }, - "DataClassificationLabel": { - "description": "Data classification label", + "BoardExportJob": { + "description": "Board export job.", "type": "object", "properties": { "id": { "type": "string", - "description": "Label id.", - "example": "3000457366756290996" + "description": "Unique identifier of the board export job.", + "format": "uuid", + "example": "92343229-c532-446d-b8cb-2f155bedb807" }, - "color": { + "name": { "type": "string", - "description": "Label color.", - "example": "#F5DC80" + "description": "Board export job name." }, - "default": { - "type": "boolean", - "description": "Label is default.", - "example": false + "boardFormat": { + "$ref": "#/components/schemas/BoardFormat" }, - "description": { + "status": { "type": "string", - "description": "Label description.", - "example": "Board could not be shared publicly" + "description": "Indicates the current state of the board export job.\nPossible values:\n`created`: the job has been created but not yet started. Retry the status call after some time.\n`in_progress`: the job is in progress, and the results are not ready yet. Retry the status call after some time.\n`cancelled`: the job has been cancelled and will not produce any more results.\n`finished`: the job is complete. You can now get results for the board export job.", + "example": "created" }, - "name": { + "createdAt": { "type": "string", - "description": "Label name.", - "example": "internal" - }, - "orderNumber": { - "type": "integer", - "description": "Label order number.", - "format": "int32", - "example": 2 + "format": "date-time" }, - "sharingRecommendation": { + "modifiedAt": { "type": "string", - "description": "Sharing Recommendation (one of NO_SHARING_RESTRICTIONS, ONLY_WITHIN_ORGANIZATION, ONLY_WITHIN_TEAM or ONLY_WITH_AUTHORIZED_TEAM_MEMBERS ).", - "example": "NO_SHARING_RESTRICTIONS" + "format": "date-time" }, - "guidelineUrl": { - "type": "string", - "description": "Indicates the URL for the board classification label guidelines.", - "example": "https://miro.com" + "tasksCount": { + "type": "object", + "properties": { + "total": { + "type": "integer", + "format": "int64", + "description": "Total number of tasks in the export." + }, + "success": { + "type": "integer", + "format": "int64", + "description": "Successfully exported tasks count." + }, + "error": { + "type": "integer", + "format": "int64", + "description": "Failed tasks count." + } + } }, - "type": { - "type": "string", - "description": "Type of the object returned.", - "default": "data-classification-label" + "creator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of the user who created the board export job.", + "example": "3458764517517852417" + } + } } } }, - "DataClassificationLabelId": { + "BoardExportJobStatus": { + "required": ["jobStatus"], "type": "object", "properties": { - "labelId": { - "type": "string", - "description": "Data classification label id", - "example": "3000457366756290996" + "jobStatus": { + "$ref": "#/components/schemas/ExportJobStatus" } } }, - "DataClassificationOrganizationSettings": { + "BoardExportResult": { "type": "object", "properties": { - "enabled": { - "type": "boolean", - "description": "Data classification enabled for organization", - "example": true + "jobId": { + "type": "string", + "description": "Unique identifier of the board export job.", + "format": "uuid", + "example": "92343229-c532-446d-b8cb-2f155bedb807" }, - "labels": { + "results": { "type": "array", - "description": "Data classification labels", + "description": "Board export task results.", "items": { - "$ref": "#/components/schemas/DataClassificationLabel" + "$ref": "#/components/schemas/BoardExportTaskResult" } - }, - "type": { - "type": "string", - "description": "Type of the object returned.", - "default": "data-classification-organization-settings" } } }, - "DataClassificationTeamSettings": { + "ExportTaskStatus": { + "type": "string", + "description": "Indicates the status of the individual board export task.\nPossible values:\n`SUCCESS`: the board export task was completed successfully and the results are available.\n`ERROR`: the board export task encountered an error and failed to complete. The `errorMessage` field provides more information on the error.\n`CANCELLED`: the board export task was cancelled.\n`SCHEDULED`: the board export task has been scheduled and is waiting to be processed.\n`CREATED`: the board export task was created.", + "example": "CREATED" + }, + "ExportTaskStatusFilter": { + "type": "string", + "description": "Indicates the status of the individual board export task.\nPossible values:\n`TASK_STATUS_SUCCESS`: the board export task was completed successfully and the results are available.\n`TASK_STATUS_ERROR`: the board export task encountered an error and failed to complete. The `errorMessage` field provides more information on the error.\n`TASK_STATUS_CANCELLED`: the board export task was cancelled.\n`TASK_STATUS_SCHEDULED`: the board export task has been scheduled and is waiting to be processed.\n`TASK_STATUS_CREATED`: the board export task was created.", + "example": "TASK_STATUS_CREATED" + }, + "ExportTaskErrorType": { + "type": "string", + "description": "Indicates the type of error encountered during the board export task.\nPossible values:\n`TEMPORARY`: the board export task encountered a temporary error. Retry the board export task after some time.\n`FATAL`: the board export failed and cannot be retried. This export will never succeed due to issues such as board corruption, non-existence, or other unrecoverable errors. Please verify the board's state or contact support if assistance is needed.\n`UNKNOWN`: the board export task encountered an unexpected exception. Retry the board export task after some time.", + "example": "TEMPORARY" + }, + "BoardExportJobTasksList": { "type": "object", "properties": { - "defaultLabelId": { - "type": "string", - "description": "Data classification default label id", - "example": "3000457366756290996" + "total": { + "$ref": "#/components/schemas/PageTotal" }, - "enabled": { - "type": "boolean", - "description": "Data classification enabled for team", - "example": true + "cursor": { + "$ref": "#/components/schemas/PageCursor" }, - "type": { - "type": "string", - "description": "Type of the object returned.", - "default": "team-data-classification-settings" + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BoardExportTask" + } } } }, - "UpdateBoardsDataClassificationLabel": { + "BoardExportTask": { "type": "object", + "required": ["id", "status"], "properties": { - "numberUpdatedBoards": { + "id": { + "type": "string", + "description": "Unique identifier of the board export task.", + "example": "9394a815-86ea-418c-8bfc-71772fdb692d" + }, + "status": { + "$ref": "#/components/schemas/ExportTaskStatus" + }, + "artifactExpiredAt": { + "type": "string", + "format": "date-time", + "description": "The date and time when the artifact will no longer be available in the S3 storage. After this time, the link will no longer be valid and the exported files will not be accessible.\nFormat: 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": "2025-08-24T17:32:28Z" + }, + "sizeInBytes": { "type": "integer", - "description": "Number of boards updated in the team", "format": "int64", - "example": 10 + "description": "Size of the exported artifact in bytes.", + "example": 1048576 }, - "type": { + "errorMessage": { "type": "string", - "description": "Type of the object returned.", - "default": "boards-data-classification-label-changed" + "description": "Contains the description of the error that occurred during a board export task." + }, + "errorType": { + "$ref": "#/components/schemas/ExportTaskErrorType" + }, + "board": { + "type": "object", + "description": "Information about a board in the board export task.", + "properties": { + "key": { + "type": "string", + "description": "Unique identifier of the board.", + "example": "o9J_kzlUDmo=" + } + } } } }, - "UpdateBoardsDataClassificationLabelRequest": { + "BoardExportTaskResult": { + "required": ["boardId", "status"], "type": "object", "properties": { - "labelId": { - "type": "integer", - "description": "Data classification label id for team", - "format": "int64", - "example": 3000457366756291000 + "boardId": { + "type": "string", + "description": "Unique identifier of the board.", + "example": "o9J_kzlUDmo=" }, - "notClassifiedOnly": { - "type": "boolean", - "description": "Assign data classification label to not-classified only or to all boards of team", - "example": true + "errorMessage": { + "type": "string", + "description": "Contains the description of the error that occurred during a board export task." + }, + "exportLink": { + "type": "string", + "description": "URL of the S3 bucket that contains the exported files." + }, + "status": { + "$ref": "#/components/schemas/ExportTaskStatus" + }, + "errorType": { + "$ref": "#/components/schemas/ExportTaskErrorType" } - } + }, + "description": "Board export task results." }, - "UpdateTeamSettingsRequest": { + "BoardExportTaskExportLink": { + "required": ["status"], "type": "object", "properties": { - "defaultLabelId": { - "type": "integer", - "description": "Data classification default label id", - "format": "int64", - "example": 3000457366756291000 + "status": { + "$ref": "#/components/schemas/ExportTaskStatus" }, - "enabled": { - "type": "boolean", - "description": "Data classification enabled for team", - "example": true + "exportLink": { + "type": "string", + "description": "URL of the S3 bucket that contains the exported files." + }, + "artifactExpiredAt": { + "type": "string", + "format": "date-time", + "description": "The date and time when the artifact will no longer be available in the S3 storage. After this time, the link will no longer be valid and the exported files will not be accessible.\nFormat: 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": "2025-08-24T17:32:28Z" + }, + "linkExpiredAt": { + "type": "string", + "format": "date-time", + "description": "The date and time when the export link will expire. After this time, the link will no longer be valid.\nFormat: 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": "2025-08-24T17:32:28Z" + }, + "errorMessage": { + "type": "string", + "description": "Contains the description of the error that occurred during a board export task results link creation." + }, + "errorType": { + "type": "string", + "description": "Indicates the type of error encountered during the board export task results link creation.\nPossible values:\n`TEMPORARY`: the board export task encountered a temporary error. Retry the board export task results link creation after some time.\n`FATAL`: the board export failed and cannot be retried. This export will never succeed due to issues such as board corruption, non-existence, or other unrecoverable errors. Please verify the board's state or contact support if assistance is needed.\n`UNKNOWN`: the board export task encountered an unexpected exception. Retry the board export task results link creation after some time.", + "example": "TEMPORARY" } - } + }, + "description": "Board export task results link." }, - "CaseRequest": { + "CreateBoardExportRequest": { "type": "object", "properties": { - "name": { + "boardIds": { + "maxItems": 50, + "minItems": 1, + "type": "array", + "description": "List of board IDs to be exported.", + "example": "o9J_kzlUDmo=", + "items": { + "type": "string", + "description": "List of board IDs to be exported.", + "example": "o9J_kzlUDmo=" + } + }, + "boardFormat": { + "$ref": "#/components/schemas/BoardFormat" + } + }, + "description": "List of board IDs to be exported." + }, + "GetBoardItemContentLogsResponse": { + "type": "object", + "description": "Response for query using cursor and filter parameters.", + "properties": { + "limit": { + "type": "integer", + "description": "The maximum number of results to return per call. If the number of logs in the response is\ngreater than the limit specified, the response returns the cursor parameter with a value.\n", + "format": "int32", + "example": 20 + }, + "size": { + "type": "integer", + "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.\n", + "format": "int32", + "example": 1 + }, + "data": { + "$ref": "#/components/schemas/BoardItemContentLogList" + }, + "cursor": { "type": "string", - "description": "The name of the case", - "example": "My Case" + "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.\n", + "example": "MTY2OTg4NTIwMDAwMHwxMjM=" }, - "description": { + "type": { "type": "string", - "description": "The description of the case", - "example": "Info about my case" + "description": "Type of the object returned.", + "default": "cursor-list" } - }, - "required": ["name"] + } }, - "CaseResponse": { + "BoardItemContentLogList": { + "type": "array", + "description": "Contains the list of content logs for a board item.", + "items": { + "$ref": "#/components/schemas/BoardItemContentLog" + } + }, + "BoardItemContentLog": { "type": "object", + "description": "Contains information about the content log of for a board item.", "properties": { "id": { "type": "string", - "pattern": "^[0-9]+$", - "description": "Unique identifier of the case.", - "example": "3074457345619012007" + "description": "Unique identifier of the content log.", + "example": "2dcf57ff-f12c-4fad-b708-c1642204b41b" }, - "organizationId": { + "contentId": { "type": "string", - "pattern": "^[0-9]+$", - "description": "Unique identifier of the organization.", - "example": "3074457345618265000" + "description": "Unique identifier of the board where the action happened.", + "example": "o9J_kzlUDmo=" }, - "name": { + "actionType": { "type": "string", - "description": "The name of the case.", - "example": "My Case" + "enum": ["create", "update", "delete"], + "description": "Type of action within the board, such as creation of a widget, update of a comment message, and so on.", + "example": "update" }, - "description": { + "actionTime": { "type": "string", - "description": "The description of the case.", - "example": "Info about my case" + "format": "date-time", + "example": "2023-06-24T17:32:28Z", + "description": "Date and time when the action happened.
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)).\n" }, - "createdBy": { - "$ref": "#/components/schemas/User" + "actor": { + "$ref": "#/components/schemas/Actor" }, - "createdAt": { + "itemType": { "type": "string", - "format": "date-time" + "enum": ["widget", "comment_thread", "comment_message"], + "description": "Type of the board item on which the action happened.", + "example": "widget" }, - "lastModifiedAt": { - "type": "string", - "format": "date-time" - } - }, - "required": ["createdAt", "createdBy", "id", "lastModifiedAt", "name", "organizationId"] - }, - "LegalHoldRequest": { - "type": "object", - "properties": { - "name": { + "itemId": { "type": "string", - "description": "The name of the legal hold.", - "example": "My legal hold" + "description": "Unique identifier of the board item on which the action happened. For example, the widget ID.", + "example": "3458764549483493025" }, - "description": { - "type": "string", - "description": "The description of the legal hold.", - "example": "Info about my legal hold" + "state": { + "$ref": "#/components/schemas/State" }, - "scope": { - "$ref": "#/components/schemas/LegalHoldRequestScope" - } - }, - "required": ["name", "scope"] - }, - "LegalHoldRequestScope": { - "description": "The legal hold scope determines the criteria used to put content items under hold. The variants of this field might get extended in the future, although the most common use case is to put users under hold. Currently only the `users` scope is supported. However, the parsing of this field must ignore unexpected variants.", - "oneOf": [ - { - "$ref": "#/components/schemas/LegalHoldRequestScopeUsers" - } - ] - }, - "LegalHoldRequestScopeUsers": { - "title": "Users", - "type": "object", - "properties": { - "users": { + "relationships": { "type": "array", + "description": "Contains the list of items related to the current board item.", "items": { - "type": "object", - "properties": { - "email": { - "type": "string", - "description": "Email of the user", - "example": "john.smith@example.com" - } - }, - "required": ["email"] + "$ref": "#/components/schemas/Relationship" } } - }, - "required": ["user"] + } }, - "LegalHoldResponse": { + "Actor": { "type": "object", + "description": "Contains information about the user who performed the action.", "properties": { "id": { "type": "string", - "pattern": "^[0-9]+$", - "description": "Unique identifier of the legal hold.", - "example": "3074457345618265000" - }, - "organizationId": { - "type": "string", - "pattern": "^[0-9]+$", - "description": "Unique identifier of the organization.", - "example": "3074457345618265000" + "description": "Unique identifier of the user who performed the action.", + "example": "3458764517517852417" }, - "caseId": { + "email": { "type": "string", - "pattern": "^[0-9]+$", - "description": "Unique identifier of the case.", - "example": "3074457345618265000" + "description": "Email of the user who performed the action.", + "example": "john.smith.demo@miro.com" }, "name": { "type": "string", - "description": "The name of the legal hold.", - "example": "My legal hold" - }, - "description": { + "description": "Name of the user who performed the action.", + "example": "John Smith" + } + } + }, + "State": { + "type": "object", + "description": "Object that contains information about the state of the board item after the action was performed." + }, + "Relationship": { + "type": "object", + "description": "Object that contains information about a related board item for the current item.", + "properties": { + "type": { "type": "string", - "description": "The description of the legal hold.", - "example": "Info about my legal hold" - }, - "state": { - "$ref": "#/components/schemas/LegalHoldState" - }, - "scope": { - "$ref": "#/components/schemas/LegalHoldResponseScope" - }, - "createdBy": { - "$ref": "#/components/schemas/User" + "description": "Indicates the relationship of this item with the current item. For example, if `type` returns `parent`, this means that related item is a parent for the current item.", + "example": "parent" }, - "createdAt": { + "itemType": { "type": "string", - "format": "date-time" + "description": "Indicates the type of the related board item. For example, if `itemType` returns `widget`, this means that related item is a widget.", + "example": "widget" }, - "lastModifiedAt": { + "itemId": { "type": "string", - "format": "date-time" + "description": "Unique identifier of the related board item.", + "example": "3074457345933870505" } - }, - "required": [ - "createdAt", - "createdBy", - "id", - "caseId", - "lastModifiedAt", - "name", - "organizationId", - "scope", - "scopeValue", - "state" - ] + } }, - "LegalHoldResponseScope": { - "description": "The legal hold scope determines the criteria used to put content items under hold. The variants of this field might get extended in the future, although the most common use case is to put users under hold. Currently only the `users` scope is supported. However, the parsing of this field must ignore unexpected variants.", - "oneOf": [ - { - "$ref": "#/components/schemas/LegalHoldResponseScopeUsers" - } - ] + "QueryCursor": { + "type": "string", + "example": "3055557345821140500" }, - "LegalHoldResponseScopeUsers": { - "title": "Users scope", + "QueryCursorBoardUserGroups": { + "type": "string", + "example": "MlR5YnRrRUJBV0N2OUxnbWxTNnJ5THwzNDU4NzY0NjEzMTE0Nzk4ODA1fEdST1VQ" + }, + "QueryLimit": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 100, + "default": 100, + "example": 100 + }, + "GroupsPage": { "type": "object", - "description": "List of users under legal hold.", + "description": "Page of groups that match the search query.", + "required": ["limit", "size", "data"], "properties": { - "users": { + "limit": { + "$ref": "#/components/schemas/PageLimit" + }, + "size": { + "$ref": "#/components/schemas/PageSize" + }, + "data": { "type": "array", - "minItems": 1, - "maxItems": 200, + "description": "List of groups.", "items": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "PaginatedLegalHoldContentItemsResponse": { - "description": "List of content items under legal hold.", - "allOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/LegalHoldContentItemsResponse" - } - } + "$ref": "#/components/schemas/Group" } - } - ] - }, - "LegalHoldContentItemsResponse": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier of the content item.", - "example": "3074457345821141000", - "pattern": "^[0-9]+$" }, - "contentId": { - "type": "string", - "description": "Identifier for the piece of content referenced by a content item. In the case of a board, this represents the `boardKey` and can be used to export a board using the Discovery APIs.", - "example": "uXjVOD6LSME=" + "cursor": { + "$ref": "#/components/schemas/PageCursor" }, "type": { - "type": "string", - "description": "Type of the content item that is returned.\n", - "example": "board" + "$ref": "#/components/schemas/PageType" } - }, - "required": ["id", "name", "type"] - }, - "LegalHoldState": { - "type": "string", - "description": "The state of the legal hold. Legal holds could take up to 24 hours to be processed and the state could be one of the following:\n- `PROCESSING`: the legal hold is being created and content items are being processed.\n- `ACTIVE`: the legal hold has been created and all content items have been processed.\n- `DELETING`: the legal hold is being deleted and content items are being processed.\n", - "enum": ["PROCESSING", "ACTIVE", "DELETING"] + } }, - "User": { - "description": "User information.", + "CreateGroupRequest": { "type": "object", + "required": ["name"], "properties": { - "id": { - "type": "string", - "description": "Unique identifier of the user.", - "example": "3458764517517852417" - }, - "email": { - "type": "string", - "description": "User email.", - "example": "john.smith@example.com" - }, - "firstName": { + "name": { "type": "string", - "description": "First name of the user.", - "example": "John" + "description": "User group name.", + "maxLength": 60, + "minLength": 1, + "example": "My user group" }, - "lastName": { + "description": { "type": "string", - "description": "Last name of the user.", - "example": "Smith" - } - }, - "required": ["id", "email", "firstName", "lastName"] - }, - "PaginatedCaseResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CaseResponse" - } - } - } + "description": "Description of the user group being created.", + "maxLength": 300, + "minLength": 0, + "example": "This user group consists of users from the product team." } - ] + } }, - "PaginatedLegalHoldResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/Pagination" + "UpdateGroupRequest": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "New name for the user group being updated.", + "maxLength": 60, + "minLength": 1, + "example": "Product user group" }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/LegalHoldResponse" - } - } - } + "description": { + "type": "string", + "description": "New description of the user group.", + "maxLength": 300, + "minLength": 0, + "example": "This group contains users that belong to the product team." } - ] + } }, - "Pagination": { + "GroupMembersPage": { "type": "object", + "description": "Page of members that match the search query.", + "required": ["limit", "size", "data"], "properties": { + "limit": { + "$ref": "#/components/schemas/PageLimit" + }, "size": { - "type": "integer", - "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.\n", - "format": "int32", - "example": 1 + "$ref": "#/components/schemas/PageSize" }, - "total": { - "type": "integer", - "description": "Total number of results in the collection.", - "format": "int32", - "example": 15 + "data": { + "type": "array", + "description": "List of group members.", + "items": { + "$ref": "#/components/schemas/GroupMember" + } }, "cursor": { "$ref": "#/components/schemas/PageCursor" }, - "limit": { - "$ref": "#/components/schemas/PageLimit", - "description": "The maximum number of results to return per call. If the number of items in the response is\ngreater than the limit specified, the response returns the cursor parameter with a value.\n" - }, "type": { - "type": "string", - "description": "Type of the response, in this case it's always 'cursor-list'.", - "default": "cursor-list" + "$ref": "#/components/schemas/PageType" } } }, - "BoardExportJobId": { - "required": ["jobId"], + "GroupMember": { "type": "object", + "required": ["id", "email", "type"], "properties": { - "jobId": { + "id": { "type": "string", - "description": "Unique identifier of the board export job.", - "format": "uuid", - "example": "92343229-c532-446d-b8cb-2f155bedb807" + "description": "User ID", + "example": "3074457345618265000" + }, + "email": { + "type": "string", + "description": "User email", + "example": "user@mail.com" + }, + "type": { + "type": "string", + "description": "Object type", + "default": "user-group-member" } } }, - "BoardExportJobStatus": { - "required": ["jobStatus"], + "CreateGroupMemberRequest": { "type": "object", + "required": ["email"], "properties": { - "jobStatus": { + "email": { "type": "string", - "description": "Indicates the current state of the board export job.\nPossible values:\n`CREATED`: the job has been created but not yet started. Retry the status call after some time.\n`IN_PROGRESS`: the job is in progress, and the results are not ready yet. Retry the status call after some time.\n`FINISHED`: the job is complete. You can now get results for the board export job.", - "example": "CREATED" + "description": "User email", + "example": "user@mail.com0" } } }, - "BoardExportResult": { + "UpdateUserGroupMembersRequest": { "type": "object", "properties": { - "jobId": { - "type": "string", - "description": "Unique identifier of the board export job.", - "format": "uuid", - "example": "92343229-c532-446d-b8cb-2f155bedb807" + "membersToAdd": { + "type": "array", + "description": "List of user emails to add to the user group.", + "items": { + "type": "string", + "description": "User email", + "example": "user1@mail.com" + } }, - "results": { + "membersToRemove": { "type": "array", - "description": "Board export task results.", + "description": "List of user emails to remove from the user group.", "items": { - "$ref": "#/components/schemas/BoardExportTaskResult" + "type": "string", + "description": "User email", + "example": "user2@mail.com" } } } }, - "BoardExportTaskResult": { - "required": ["boardId", "status"], + "UpdateUserGroupMembersResult": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/UpdateUserGroupMembersResultSuccess" + }, + { + "$ref": "#/components/schemas/UpdateUserGroupMembersResultError" + } + ] + } + }, + "UpdateUserGroupMembersResultSuccess": { "type": "object", "properties": { - "boardId": { - "type": "string", - "description": "Unique identifier of the board.", - "example": "o9J_kzlUDmo=" - }, - "errorMessage": { - "type": "string", - "description": "Contains the description of the error that occurred during a board export task." - }, - "exportLink": { - "type": "string", - "description": "URL of the S3 bucket that contains the exported files." + "operation": { + "$ref": "#/components/schemas/UpdateUserGroupMembersResultOperation" }, "status": { - "type": "string", - "description": "Indicates the status of the individual board export task.\nPossible values:\n`SUCCESS`: the board export task was completed successfully and the results are available.\n`ERROR`: the board export task encountered an error and failed to complete. The `errorMessage` field provides more information on the error.", - "example": "CREATED" + "type": "integer", + "description": "The HTTP status code for the successful operation.", + "example": 200 }, - "errorType": { - "type": "string", - "description": "Indicates the type of error encountered during the board export task.\nPossible values:\n`TEMPORARY`: the board export task encountered a temporary error. Retry the board export task after some time.\n`FATAL`: the board export failed and cannot be retried. This export will never succeed due to issues such as board corruption, non-existence, or other unrecoverable errors. Please verify the board's state or contact support if assistance is needed.\n`UNKNOWN`: the board export task encountered an unexpected exception. Retry the board export task after some time.", - "example": "TEMPORARY" + "affectedUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupMember" + } } - }, - "description": "Board export task results." + } }, - "CreateBoardExportRequest": { + "UpdateUserGroupMembersResultError": { "type": "object", "properties": { - "boardIds": { - "maxItems": 50, - "minItems": 1, - "type": "array", - "description": "List of board IDs to be exported.", - "example": "o9J_kzlUDmo=", - "items": { - "type": "string", - "description": "List of board IDs to be exported.", - "example": "o9J_kzlUDmo=" - } + "operation": { + "$ref": "#/components/schemas/UpdateUserGroupMembersResultOperation" }, - "boardFormat": { - "type": "string", - "enum": ["SVG", "HTML", "PDF"], - "default": "SVG", - "description": "Specifies the format of the file to which the board will be exported. Supported formats include SVG (default), HTML, and PDF.", - "example": "SVG" + "status": { + "type": "integer", + "description": "The HTTP status code for the successful operation.", + "example": 400 + }, + "error": { + "allOf": [ + { + "$ref": "#/components/schemas/BasicError" + }, + { + "type": "object", + "properties": { + "status": { + "default": 400 + }, + "code": { + "default": "invalidParameters" + } + } + } + ] } - }, - "description": "List of board IDs to be exported." + } }, - "GetBoardItemContentLogsResponse": { + "UpdateUserGroupMembersResultOperation": { + "type": "string", + "description": "The name of the operation that was performed.", + "enum": ["addMembers", "removeMembers"] + }, + "GroupTeamsPage": { "type": "object", - "description": "Response for query using cursor and filter parameters.", + "description": "Page of teams that match the search query.", + "required": ["limit", "size", "data"], "properties": { "limit": { - "type": "integer", - "description": "The maximum number of results to return per call. If the number of logs in the response is\ngreater than the limit specified, the response returns the cursor parameter with a value.\n", - "format": "int32", - "example": 20 + "$ref": "#/components/schemas/PageLimit" }, "size": { - "type": "integer", - "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.\n", - "format": "int32", - "example": 1 + "$ref": "#/components/schemas/PageSize" }, "data": { - "$ref": "#/components/schemas/BoardItemContentLogList" + "type": "array", + "description": "List of teams.", + "items": { + "$ref": "#/components/schemas/GroupTeam" + } }, "cursor": { - "type": "string", - "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.\n", - "example": "MTY2OTg4NTIwMDAwMHwxMjM=" + "$ref": "#/components/schemas/PageCursor" }, "type": { - "type": "string", - "description": "Type of the object returned.", - "default": "cursor-list" + "$ref": "#/components/schemas/PageType" } } }, - "BoardItemContentLogList": { - "type": "array", - "description": "Contains the list of content logs for a board item.", - "items": { - "$ref": "#/components/schemas/BoardItemContentLog" - } - }, - "BoardItemContentLog": { + "GroupTeam": { "type": "object", - "description": "Contains information about the content log of for a board item.", + "required": ["id", "role"], "properties": { "id": { "type": "string", - "description": "Unique identifier of the content log.", - "example": "2dcf57ff-f12c-4fad-b708-c1642204b41b" + "description": "Team ID", + "example": "3074457345618265000" }, - "contentId": { + "role": { "type": "string", - "description": "Unique identifier of the board where the action happened.", - "example": "o9J_kzlUDmo=" + "description": "Role of the user group in the team", + "enum": ["member"], + "default": "member", + "example": "member" }, - "actionType": { + "type": { "type": "string", - "enum": ["create", "update", "delete"], - "description": "Type of action within the board, such as creation of a widget, update of a comment message, and so on.", - "example": "update" + "description": "Object type", + "default": "user-group-team" + } + } + }, + "TeamGroupsPage": { + "type": "object", + "description": "Page of groups that match the search query.", + "required": ["limit", "size", "data"], + "properties": { + "limit": { + "$ref": "#/components/schemas/PageLimit" }, - "actionTime": { - "type": "string", - "format": "date-time", - "example": "2023-06-24T17:32:28Z", - "description": "Date and time when the action happened.
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)).\n" + "size": { + "$ref": "#/components/schemas/PageSize" }, - "actor": { - "$ref": "#/components/schemas/Actor" + "data": { + "type": "array", + "description": "List of groups.", + "items": { + "$ref": "#/components/schemas/TeamGroup" + } }, - "itemType": { + "cursor": { + "$ref": "#/components/schemas/PageCursor" + }, + "type": { + "$ref": "#/components/schemas/PageType" + } + } + }, + "TeamGroup": { + "type": "object", + "required": ["id", "role"], + "properties": { + "id": { "type": "string", - "enum": ["widget", "comment_thread", "comment_message"], - "description": "Type of the board item on which the action happened.", - "example": "widget" + "description": "User group ID.", + "example": "3074457345618265000" }, - "itemId": { + "role": { "type": "string", - "description": "Unique identifier of the board item on which the action happened. For example, the widget ID.", - "example": "3458764549483493025" + "description": "Role of the user group in the team.", + "enum": ["member"], + "default": "member", + "example": "member" }, - "state": { - "$ref": "#/components/schemas/State" + "type": { + "type": "string", + "description": "Object type", + "default": "team-user-group" } } }, - "Actor": { + "BoardUserGroup": { "type": "object", - "description": "Contains information about the user who performed the action.", + "required": ["id", "role"], "properties": { "id": { "type": "string", - "description": "Unique identifier of the user who performed the action.", - "example": "3458764517517852417" + "description": "User group ID.", + "example": "3074457345618265000" }, - "email": { - "type": "string", - "description": "Email of the user who performed the action.", - "example": "john.smith.demo@miro.com" + "role": { + "description": "Role of the user group in the team.", + "enum": ["VIEWER", "COMMENTER", "EDITOR"], + "default": "VIEWER", + "example": "VIEWER" }, - "name": { - "type": "string", - "description": "Name of the user who performed the action.", - "example": "John Smith" + "type": { + "description": "Object type", + "default": "board-user-group" } } }, - "State": { + "BoardUserGroupsPage": { "type": "object", - "description": "Object that contains information about the state of the board item after the action was performed." + "description": "Page of user groups that with access to the board.", + "required": ["limit", "size", "data"], + "properties": { + "limit": { + "$ref": "#/components/schemas/PageLimit" + }, + "size": { + "$ref": "#/components/schemas/PageSize" + }, + "data": { + "type": "array", + "description": "List of user groups.", + "items": { + "$ref": "#/components/schemas/BoardUserGroup" + } + }, + "cursor": { + "$ref": "#/components/schemas/PageCursor" + }, + "type": { + "$ref": "#/components/schemas/PageType" + } + } }, - "BasicErrorEnterpriseUserSessionResetEnterprisePlan": { + "CreateBoardUserGroupsRequest": { "type": "object", + "required": ["userGroupIds", "role"], "properties": { - "status": { - "type": "number", - "description": "HTTP status code." + "userGroupIds": { + "type": "array", + "description": "List of user group ids.", + "items": { + "type": "string", + "description": "User group ID.", + "example": "3074457345618265000" + } }, - "code": { + "role": { "type": "string", - "description": "Description of the status code." - }, - "message": { + "description": "Role of the user group in the team.", + "enum": ["VIEWER", "COMMENTER", "EDITOR"], + "default": "VIEWER", + "example": "VIEWER" + } + } + }, + "CreateTeamGroupRequest": { + "type": "object", + "required": ["userGroupId", "role"], + "properties": { + "userGroupId": { "type": "string", - "description": "Explanation for the error" + "description": "User group ID.", + "example": "3074457345618265000" }, - "type": { + "role": { "type": "string", - "description": "Type of the object returned.", - "default": "error" + "enum": ["member"], + "description": "Role of user group in the team.", + "example": "member" } } }, @@ -13656,11 +15372,11 @@ }, "teamId": { "type": "string", - "description": "Unique identifier (ID) of the team where the board must be placed." + "description": "Unique identifier (ID) of the team where the board must be placed.\n\n**Note**: On Enterprise plan, boards can be moved via API by Board Owners, Co-Owners, and Content Admins. This behavior differs from the Miro UI, where only Board Owners can move boards. This difference is **intentional** and works as designed. On non-Enterprise plans, only Board Owners can move boards between teams—both via the API and the Miro UI." }, "projectId": { "type": "string", - "description": "Unique identifier (ID) of the project to which the board must be added." + "description": "Unique identifier (ID) of the project to which the board must be added.\n\n**Note**: Projects have been renamed to Spaces. Use this parameter to update the space. For Starter and Edu plans, Team Admins looking to move boards between Spaces/Projects of the same team would need to be direct Board Editors on the boards to move." } } }, @@ -13899,6 +15615,11 @@ "description": "Defines the public-level access to the board.", "enum": ["private", "view", "edit", "comment"] }, + "accessPasswordRequired": { + "type": "boolean", + "description": "Defines if a password is required to access the board.", + "default": false + }, "inviteToAccountAndBoardLinkAccess": { "type": "string", "default": "no_access", @@ -19903,8 +21624,8 @@ }, "role": { "type": "string", - "description": "\nRole of the team member.\n* \"member\": Team member with full member permissions.\n* \"admin\": Admin of a team. Team member with permission to manage team.\n* \"non_team\": External user, non-team user.\n* \"team_guest\": Team-guest user, user with access only to a team without access to organization.\n", - "enum": ["non_team", "member", "admin", "team_guest"] + "description": "\nRole of the team member.\n* \"member\": Team member with full member permissions.\n* \"admin\": Admin of a team. Team member with permission to manage team.\n* \"non_team\": External user, non-team user.\n* \"team_guest\": (Deprecated) Team-guest user, user with access only to a team without access to organization.\n", + "enum": ["non_team", "member", "admin"] }, "createdAt": { "type": "string", @@ -19944,8 +21665,8 @@ "role": { "type": "string", "example": "member", - "description": "\nRole of the team member.\n* \"member\": Team member with full member permissions.\n* \"admin\": Admin of a team. Team member with permission to manage team.\n* \"team_guest\": Team-guest user, user with access only to a team without access to organization.\n", - "enum": ["member", "admin", "team_guest"] + "description": "\nRole of the team member.\n* \"member\": Team member with full member permissions.\n* \"admin\": Admin of a team. Team member with permission to manage team.\n", + "enum": ["member", "admin"] } } }, @@ -19961,8 +21682,8 @@ "role": { "type": "string", "example": "member", - "description": "\nRole of the team member.\n* \"member\": Team member with full member permissions.\n* \"admin\": Admin of a team. Team member with permission to manage team.\n* \"team_guest\": Team-guest user, user with access only to a team without access to organization.\n", - "enum": ["member", "admin", "team_guest"] + "description": "\nRole of the team member.\n* \"member\": Team member with full member permissions.\n* \"admin\": Admin of a team. Team member with permission to manage team.\n", + "enum": ["member", "admin"] } } }, @@ -20064,7 +21785,7 @@ }, "restrictAllowedDomains": { "type": "string", - "description": "\n* \"enabled\": Enabled. Restrict to listed domain.\n* \"disabled\": Disabled. No domain restriction.\n* \"enabled_with_external_users_access\": Enabled. Restrict to listed domain but allows external users to access.\n", + "description": "\n* \"enabled\": Enabled. Restrict to listed domain.\n* \"disabled\": Disabled. No domain restriction.\n* \"enabled_with_external_user_access\": Enabled. Restrict to listed domain but allows external users to access.\n", "enum": ["enabled", "enabled_with_external_user_access", "disabled"] }, "sharingOnAccount": { @@ -20129,7 +21850,7 @@ }, "restrictAllowedDomains": { "type": "string", - "description": "\n* \"enabled\": Enabled. Restrict to listed domain.\n* \"disabled\": Disabled. No domain restriction.\n* \"enabled_with_external_users_access\": Enabled. Restrict to listed domain but allows external users to access.\n", + "description": "\n* \"enabled\": Enabled. Restrict to listed domain.\n* \"disabled\": Disabled. No domain restriction.\n* \"enabled_with_external_user_access\": Enabled. Restrict to listed domain but allows external users to access.\n", "enum": ["enabled", "enabled_with_external_user_access", "disabled"] }, "sharingOnAccount": { @@ -20150,7 +21871,7 @@ }, "description": "Team sharing policy settings" }, - "PageLimit": { + "PageLimitTeamsEnterprisePlan": { "type": "integer", "format": "int32", "minimum": 1, @@ -20159,7 +21880,7 @@ "example": 100, "description": "The maximum number of results to return per call. If the number of project in the response is greater than the limit specified, the response returns the cursor parameter with a value." }, - "PageSize": { + "PageSizeTeamsEnterprisePlan": { "type": "integer", "format": "int32", "minimum": 0, @@ -20168,12 +21889,12 @@ "example": 87, "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." }, - "PageCursor": { + "PageCursorTeamsEnterprisePlan": { "type": "string", "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.", "example": "3074457345821140946" }, - "PageType": { + "PageTypeTeamsEnterprisePlan": { "type": "string", "description": "Type of the object returned.", "default": "cursor-list" @@ -20230,124 +21951,33 @@ } } }, - "ErrorResponse": { - "type": "object", - "description": "Error response structure", - "properties": { - "status": { - "type": "integer", - "description": "HTTP status code" - }, - "code": { - "type": "string", - "description": "Error code" - }, - "message": { - "type": "string", - "description": "Error message" - }, - "context": { - "type": "object", - "properties": { - "error": { - "type": "string", - "description": "Additional error context" - } - } - } - } - } - }, - "responses": { - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - }, - "example": { - "status": 400, - "code": "badRequest", - "message": "Bad request" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - }, - "example": { - "status": 401, - "code": "unauthorized", - "message": "Unauthorized" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - }, - "example": { - "status": 403, - "code": "forbidden", - "message": "Forbidden" - } - } - } + "PageLimit": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 100, + "default": 100, + "example": 100, + "description": "The maximum number of results to return per call. If the number of project in the response is greater than the limit specified, the response returns the cursor parameter with a value." }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - }, - "example": { - "status": 404, - "code": "notFound", - "message": "Not found" - } - } - } + "PageSize": { + "type": "integer", + "format": "int32", + "minimum": 0, + "maximum": 100, + "default": 100, + "example": 87, + "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." }, - "409": { - "description": "Conflict", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - }, - "example": { - "status": 409, - "code": "conflict", - "message": "Conflict" - } - } - } + "PageCursor": { + "type": "string", + "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.", + "example": "3074457345821140946" }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - }, - "example": { - "status": 429, - "code": "tooManyRequests", - "message": "Too many requests" - } - } - } + "PageType": { + "type": "string", + "description": "Type of the object returned.", + "default": "cursor-list" } }, "parameters": { @@ -20355,7 +21985,6 @@ "in": "query", "name": "limit", "description": "The maximum number of items in the result list.", - "required": true, "schema": { "type": "integer", "maximum": 100, @@ -20374,6 +22003,125 @@ }, "example": "MTY2OTg4NTIwMDAwMHwxMjM=" }, + "pathGroupId": { + "name": "group_id", + "description": "The ID of a user group.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345618265000" + }, + "pathGroupMemberId": { + "name": "member_id", + "description": "The ID of a group member.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "3074457345618265000" + }, + "pathBoardId": { + "name": "board_id", + "description": "The ID of the board.", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "example": "uXjVOfjm6tI=" + }, + "queryCursor": { + "name": "cursor", + "description": "A representation of the position of an item in the full set of results. The cursor is used to determine the first item of the resulting set. Leave empty to retrieve items from the beginning.", + "in": "query", + "schema": { + "type": "string" + }, + "example": "3055557345821140500" + }, + "queryLimitGroups": { + "name": "limit", + "description": "The maximum number of user groups in the result list.", + "in": "query", + "schema": { + "$ref": "#/components/schemas/QueryLimit" + } + }, + "queryLimitGroupMembers": { + "name": "limit", + "description": "The maximum number of members in the result list.", + "in": "query", + "schema": { + "$ref": "#/components/schemas/QueryLimit" + } + }, + "queryLimitGroupTeams": { + "name": "limit", + "description": "The maximum number of teams in the result list.", + "in": "query", + "schema": { + "$ref": "#/components/schemas/QueryLimit" + } + }, + "queryLimitTeamGroups": { + "name": "limit", + "description": "The maximum number of user groups in the result list.", + "in": "query", + "schema": { + "$ref": "#/components/schemas/QueryLimit" + } + }, + "queryCursorGroups": { + "name": "cursor", + "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.", + "in": "query", + "schema": { + "$ref": "#/components/schemas/QueryCursor" + } + }, + "queryCursorGroupMembers": { + "name": "cursor", + "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.", + "in": "query", + "schema": { + "$ref": "#/components/schemas/QueryCursor" + } + }, + "queryCursorGroupTeams": { + "name": "cursor", + "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.", + "in": "query", + "schema": { + "$ref": "#/components/schemas/QueryCursor" + } + }, + "queryCursorTeamGroups": { + "name": "cursor", + "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.", + "in": "query", + "schema": { + "$ref": "#/components/schemas/QueryCursor" + } + }, + "queryLimitBoardUserGroups": { + "name": "limit", + "description": "The maximum number of user groups in the result list.", + "in": "query", + "schema": { + "$ref": "#/components/schemas/QueryLimit" + } + }, + "queryCursorBoardUserGroups": { + "name": "cursor", + "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.", + "in": "query", + "schema": { + "$ref": "#/components/schemas/QueryCursorBoardUserGroups" + } + }, "boardIdPlatformcreateitemsinbulkusingfilefromdevice": { "description": "Unique identifier (ID) of the board where you want to create the item.", "required": true, diff --git a/packages/miro-api-python/.openapi-generator/FILES b/packages/miro-api-python/.openapi-generator/FILES index bac0652e3..7eaea9837 100644 --- a/packages/miro-api-python/.openapi-generator/FILES +++ b/packages/miro-api-python/.openapi-generator/FILES @@ -29,14 +29,18 @@ 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/share_boards_with_groups_api.py miro_api/api/sticky_notes_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/webhooks_experimental_api.py +miro_api/api/user_group_members_api.py +miro_api/api/user_group_to_teams_api.py +miro_api/api/user_groups_api.py miro_api/api_client.py miro_api/api_response.py miro_api/configuration.py @@ -62,7 +66,6 @@ miro_api/docs/AuditOrganization.md miro_api/docs/AuditPage.md miro_api/docs/AuditTeam.md miro_api/docs/BasicError.md -miro_api/docs/BasicErrorEnterpriseUserSessionResetEnterprisePlan.md miro_api/docs/BasicErrorOrganizationsEnterprisePlan.md miro_api/docs/Board.md miro_api/docs/BoardChanges.md @@ -72,10 +75,19 @@ miro_api/docs/BoardClassificationTeamLevelApi.md miro_api/docs/BoardContentLogsApi.md miro_api/docs/BoardDataClassificationLabel.md miro_api/docs/BoardExportApi.md +miro_api/docs/BoardExportJob.md +miro_api/docs/BoardExportJobCreator.md miro_api/docs/BoardExportJobId.md miro_api/docs/BoardExportJobStatus.md +miro_api/docs/BoardExportJobTasksCount.md +miro_api/docs/BoardExportJobTasksList.md +miro_api/docs/BoardExportJobsList.md miro_api/docs/BoardExportResult.md +miro_api/docs/BoardExportTask.md +miro_api/docs/BoardExportTaskBoard.md +miro_api/docs/BoardExportTaskExportLink.md miro_api/docs/BoardExportTaskResult.md +miro_api/docs/BoardFormat.md miro_api/docs/BoardItemContentLog.md miro_api/docs/BoardLinks.md miro_api/docs/BoardMember.md @@ -92,6 +104,8 @@ miro_api/docs/BoardSharingPolicy.md miro_api/docs/BoardSharingPolicyChange.md miro_api/docs/BoardSubscription.md miro_api/docs/BoardSubscriptionData.md +miro_api/docs/BoardUserGroup.md +miro_api/docs/BoardUserGroupsPage.md miro_api/docs/BoardWithLinks.md miro_api/docs/BoardWithLinksAndLastOpened.md miro_api/docs/BoardWithLinksAndWithoutProject.md @@ -121,9 +135,13 @@ miro_api/docs/ConnectorsCursorPaged.md miro_api/docs/CopyBoardChanges.md miro_api/docs/CreateBoardExportRequest.md miro_api/docs/CreateBoardSubscriptionRequest.md +miro_api/docs/CreateBoardUserGroupsRequest.md miro_api/docs/CreateDocumentItemUsingFileFromDeviceRequestData.md miro_api/docs/CreateFrameItem400Response.md +miro_api/docs/CreateGroupMemberRequest.md +miro_api/docs/CreateGroupRequest.md miro_api/docs/CreateProjectRequest.md +miro_api/docs/CreateTeamGroupRequest.md miro_api/docs/CreateTeamRequest.md miro_api/docs/CreatedBy.md miro_api/docs/CreatedByPlatformContainers.md @@ -160,6 +178,9 @@ 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 +miro_api/docs/EnterpriseUpdateBoardExportJobRequest.md miro_api/docs/Error.md miro_api/docs/Error400.md miro_api/docs/Error401.md @@ -168,6 +189,7 @@ miro_api/docs/Error404.md miro_api/docs/Error409.md miro_api/docs/Error429.md miro_api/docs/ErrorResponse.md +miro_api/docs/ExportJobStatus.md miro_api/docs/FixedRatioGeometry.md miro_api/docs/FixedRatioGeometryPlatformFileUpload.md miro_api/docs/FixedRatioNoRotationGeometry.md @@ -212,8 +234,13 @@ miro_api/docs/GetTagsFromItem400Response.md miro_api/docs/GetTagsResponse.md miro_api/docs/Group.md miro_api/docs/GroupData.md +miro_api/docs/GroupMember.md +miro_api/docs/GroupMembersPage.md miro_api/docs/GroupResponseShort.md +miro_api/docs/GroupTeam.md +miro_api/docs/GroupTeamsPage.md miro_api/docs/GroupsApi.md +miro_api/docs/GroupsPage.md miro_api/docs/ImageCreateRequest.md miro_api/docs/ImageData.md miro_api/docs/ImageDataResponse.md @@ -281,6 +308,8 @@ miro_api/docs/OrganizationMembersSearchResponse.md miro_api/docs/OrganizationsApi.md miro_api/docs/PageLinks.md miro_api/docs/PageLinksPlatformExperimentalFeatures.md +miro_api/docs/PaginatedCaseExportJobsResponse.md +miro_api/docs/PaginatedCaseExportJobsResponseDataInner.md miro_api/docs/PaginatedCaseResponse.md miro_api/docs/PaginatedLegalHoldContentItemsResponse.md miro_api/docs/PaginatedLegalHoldResponse.md @@ -303,6 +332,7 @@ miro_api/docs/ProjectRoleToAdd.md miro_api/docs/ProjectSettings.md miro_api/docs/ProjectSettingsApi.md miro_api/docs/ProjectsApi.md +miro_api/docs/Relationship.md miro_api/docs/RelativeOffset.md miro_api/docs/ResetAllSessionsOfAUserApi.md miro_api/docs/RevokeTokenRequest.md @@ -320,6 +350,7 @@ 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/SharingPolicySettings.md miro_api/docs/StickyNoteCreateRequest.md miro_api/docs/StickyNoteData.md @@ -346,6 +377,8 @@ miro_api/docs/TeamCollaborationSettings.md miro_api/docs/TeamCollaborationSettingsChanges.md miro_api/docs/TeamCopyAccessLevelSettings.md miro_api/docs/TeamCopyAccessLevelSettingsChanges.md +miro_api/docs/TeamGroup.md +miro_api/docs/TeamGroupsPage.md miro_api/docs/TeamInformation.md miro_api/docs/TeamInvitationSettings.md miro_api/docs/TeamInvitationSettingsChanges.md @@ -359,6 +392,7 @@ miro_api/docs/TeamSettingsApi.md miro_api/docs/TeamSettingsChanges.md miro_api/docs/TeamSharingPolicySettings.md miro_api/docs/TeamSharingPolicySettingsChanges.md +miro_api/docs/TeamUserGroupsApi.md miro_api/docs/TeamsApi.md miro_api/docs/TeamsPage.md miro_api/docs/TextCreateRequest.md @@ -382,6 +416,7 @@ miro_api/docs/UpdateCardStyle.md miro_api/docs/UpdateConnectorStyle.md miro_api/docs/UpdateFrameItem409Response.md miro_api/docs/UpdateFrameStyle.md +miro_api/docs/UpdateGroupRequest.md miro_api/docs/UpdateProjectMemberRequest.md miro_api/docs/UpdateProjectRequest.md miro_api/docs/UpdateProjectSettingsRequest.md @@ -389,12 +424,20 @@ miro_api/docs/UpdateShapeStyle.md miro_api/docs/UpdateStickyNoteStyle.md miro_api/docs/UpdateTeamSettingsRequest.md miro_api/docs/UpdateTextStyle.md +miro_api/docs/UpdateUserGroupMembersRequest.md +miro_api/docs/UpdateUserGroupMembersResultError.md +miro_api/docs/UpdateUserGroupMembersResultErrorError.md +miro_api/docs/UpdateUserGroupMembersResultInner.md +miro_api/docs/UpdateUserGroupMembersResultOperation.md +miro_api/docs/UpdateUserGroupMembersResultSuccess.md miro_api/docs/UploadFileFromDeviceData.md miro_api/docs/User.md +miro_api/docs/UserGroupMembersApi.md +miro_api/docs/UserGroupToTeamsApi.md +miro_api/docs/UserGroupsApi.md miro_api/docs/UserInfoLastOpenedBy.md miro_api/docs/UserInfoShort.md miro_api/docs/UserInformation.md -miro_api/docs/WebhooksExperimentalApi.md miro_api/docs/WidgetDataOutput.md miro_api/docs/WidgetLinks.md miro_api/docs/WidgetLinksPlatformContainers.md @@ -422,15 +465,23 @@ miro_api/models/audit_organization.py miro_api/models/audit_page.py miro_api/models/audit_team.py miro_api/models/basic_error.py -miro_api/models/basic_error_enterprise_user_session_reset_enterprise_plan.py miro_api/models/basic_error_organizations_enterprise_plan.py miro_api/models/board.py miro_api/models/board_changes.py miro_api/models/board_data_classification_label.py +miro_api/models/board_export_job.py +miro_api/models/board_export_job_creator.py miro_api/models/board_export_job_id.py miro_api/models/board_export_job_status.py +miro_api/models/board_export_job_tasks_count.py +miro_api/models/board_export_job_tasks_list.py +miro_api/models/board_export_jobs_list.py miro_api/models/board_export_result.py +miro_api/models/board_export_task.py +miro_api/models/board_export_task_board.py +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_links.py miro_api/models/board_member.py @@ -446,6 +497,8 @@ miro_api/models/board_sharing_policy.py miro_api/models/board_sharing_policy_change.py miro_api/models/board_subscription.py miro_api/models/board_subscription_data.py +miro_api/models/board_user_group.py +miro_api/models/board_user_groups_page.py miro_api/models/board_with_links.py miro_api/models/board_with_links_and_last_opened.py miro_api/models/board_with_links_and_without_project.py @@ -471,9 +524,13 @@ miro_api/models/connectors_cursor_paged.py miro_api/models/copy_board_changes.py miro_api/models/create_board_export_request.py miro_api/models/create_board_subscription_request.py +miro_api/models/create_board_user_groups_request.py miro_api/models/create_document_item_using_file_from_device_request_data.py miro_api/models/create_frame_item400_response.py +miro_api/models/create_group_member_request.py +miro_api/models/create_group_request.py miro_api/models/create_project_request.py +miro_api/models/create_team_group_request.py miro_api/models/create_team_request.py miro_api/models/created_by.py miro_api/models/created_by_platform_containers.py @@ -508,6 +565,9 @@ miro_api/models/embed_url_data.py miro_api/models/embed_url_data_changes.py miro_api/models/embed_url_data_platformbulkcreateoperation.py miro_api/models/enterprise_get_organization_members200_response.py +miro_api/models/enterprise_update_board_export_job200_response.py +miro_api/models/enterprise_update_board_export_job200_response_status.py +miro_api/models/enterprise_update_board_export_job_request.py miro_api/models/error.py miro_api/models/error400.py miro_api/models/error401.py @@ -516,6 +576,7 @@ miro_api/models/error404.py miro_api/models/error409.py miro_api/models/error429.py miro_api/models/error_response.py +miro_api/models/export_job_status.py miro_api/models/fixed_ratio_geometry.py miro_api/models/fixed_ratio_geometry_platform_file_upload.py miro_api/models/fixed_ratio_no_rotation_geometry.py @@ -558,7 +619,12 @@ miro_api/models/get_tags_from_item400_response.py miro_api/models/get_tags_response.py miro_api/models/group.py miro_api/models/group_data.py +miro_api/models/group_member.py +miro_api/models/group_members_page.py miro_api/models/group_response_short.py +miro_api/models/group_team.py +miro_api/models/group_teams_page.py +miro_api/models/groups_page.py miro_api/models/image_create_request.py miro_api/models/image_data.py miro_api/models/image_data_response.py @@ -619,6 +685,8 @@ miro_api/models/organization_member.py miro_api/models/organization_members_search_response.py miro_api/models/page_links.py miro_api/models/page_links_platform_experimental_features.py +miro_api/models/paginated_case_export_jobs_response.py +miro_api/models/paginated_case_export_jobs_response_data_inner.py miro_api/models/paginated_case_response.py miro_api/models/paginated_legal_hold_content_items_response.py miro_api/models/paginated_legal_hold_response.py @@ -638,6 +706,7 @@ miro_api/models/project_page.py miro_api/models/project_role.py miro_api/models/project_role_to_add.py miro_api/models/project_settings.py +miro_api/models/relationship.py miro_api/models/relative_offset.py miro_api/models/revoke_token_request.py miro_api/models/self_link.py @@ -677,6 +746,8 @@ miro_api/models/team_collaboration_settings.py miro_api/models/team_collaboration_settings_changes.py miro_api/models/team_copy_access_level_settings.py miro_api/models/team_copy_access_level_settings_changes.py +miro_api/models/team_group.py +miro_api/models/team_groups_page.py miro_api/models/team_information.py miro_api/models/team_invitation_settings.py miro_api/models/team_invitation_settings_changes.py @@ -708,6 +779,7 @@ miro_api/models/update_card_style.py miro_api/models/update_connector_style.py miro_api/models/update_frame_item409_response.py miro_api/models/update_frame_style.py +miro_api/models/update_group_request.py miro_api/models/update_project_member_request.py miro_api/models/update_project_request.py miro_api/models/update_project_settings_request.py @@ -715,6 +787,12 @@ miro_api/models/update_shape_style.py miro_api/models/update_sticky_note_style.py miro_api/models/update_team_settings_request.py miro_api/models/update_text_style.py +miro_api/models/update_user_group_members_request.py +miro_api/models/update_user_group_members_result_error.py +miro_api/models/update_user_group_members_result_error_error.py +miro_api/models/update_user_group_members_result_inner.py +miro_api/models/update_user_group_members_result_operation.py +miro_api/models/update_user_group_members_result_success.py miro_api/models/upload_file_from_device_data.py miro_api/models/user.py miro_api/models/user_info_last_opened_by.py @@ -750,7 +828,6 @@ miro_api/test/test_audit_organization.py miro_api/test/test_audit_page.py miro_api/test/test_audit_team.py miro_api/test/test_basic_error.py -miro_api/test/test_basic_error_enterprise_user_session_reset_enterprise_plan.py miro_api/test/test_basic_error_organizations_enterprise_plan.py miro_api/test/test_board.py miro_api/test/test_board_changes.py @@ -760,10 +837,19 @@ miro_api/test/test_board_classification_team_level_api.py miro_api/test/test_board_content_logs_api.py miro_api/test/test_board_data_classification_label.py miro_api/test/test_board_export_api.py +miro_api/test/test_board_export_job.py +miro_api/test/test_board_export_job_creator.py miro_api/test/test_board_export_job_id.py miro_api/test/test_board_export_job_status.py +miro_api/test/test_board_export_job_tasks_count.py +miro_api/test/test_board_export_job_tasks_list.py +miro_api/test/test_board_export_jobs_list.py miro_api/test/test_board_export_result.py +miro_api/test/test_board_export_task.py +miro_api/test/test_board_export_task_board.py +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_links.py miro_api/test/test_board_member.py @@ -780,6 +866,8 @@ miro_api/test/test_board_sharing_policy.py miro_api/test/test_board_sharing_policy_change.py miro_api/test/test_board_subscription.py miro_api/test/test_board_subscription_data.py +miro_api/test/test_board_user_group.py +miro_api/test/test_board_user_groups_page.py miro_api/test/test_board_with_links.py miro_api/test/test_board_with_links_and_last_opened.py miro_api/test/test_board_with_links_and_without_project.py @@ -809,9 +897,13 @@ miro_api/test/test_connectors_cursor_paged.py miro_api/test/test_copy_board_changes.py miro_api/test/test_create_board_export_request.py miro_api/test/test_create_board_subscription_request.py +miro_api/test/test_create_board_user_groups_request.py miro_api/test/test_create_document_item_using_file_from_device_request_data.py miro_api/test/test_create_frame_item400_response.py +miro_api/test/test_create_group_member_request.py +miro_api/test/test_create_group_request.py miro_api/test/test_create_project_request.py +miro_api/test/test_create_team_group_request.py miro_api/test/test_create_team_request.py miro_api/test/test_created_by.py miro_api/test/test_created_by_platform_containers.py @@ -848,6 +940,9 @@ 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 +miro_api/test/test_enterprise_update_board_export_job_request.py miro_api/test/test_error.py miro_api/test/test_error400.py miro_api/test/test_error401.py @@ -856,6 +951,7 @@ miro_api/test/test_error404.py miro_api/test/test_error409.py miro_api/test/test_error429.py miro_api/test/test_error_response.py +miro_api/test/test_export_job_status.py miro_api/test/test_fixed_ratio_geometry.py miro_api/test/test_fixed_ratio_geometry_platform_file_upload.py miro_api/test/test_fixed_ratio_no_rotation_geometry.py @@ -900,8 +996,13 @@ miro_api/test/test_get_tags_from_item400_response.py miro_api/test/test_get_tags_response.py miro_api/test/test_group.py miro_api/test/test_group_data.py +miro_api/test/test_group_member.py +miro_api/test/test_group_members_page.py miro_api/test/test_group_response_short.py +miro_api/test/test_group_team.py +miro_api/test/test_group_teams_page.py miro_api/test/test_groups_api.py +miro_api/test/test_groups_page.py miro_api/test/test_image_create_request.py miro_api/test/test_image_data.py miro_api/test/test_image_data_response.py @@ -969,6 +1070,8 @@ miro_api/test/test_organization_members_search_response.py miro_api/test/test_organizations_api.py miro_api/test/test_page_links.py miro_api/test/test_page_links_platform_experimental_features.py +miro_api/test/test_paginated_case_export_jobs_response.py +miro_api/test/test_paginated_case_export_jobs_response_data_inner.py miro_api/test/test_paginated_case_response.py miro_api/test/test_paginated_legal_hold_content_items_response.py miro_api/test/test_paginated_legal_hold_response.py @@ -991,6 +1094,7 @@ miro_api/test/test_project_role_to_add.py miro_api/test/test_project_settings.py miro_api/test/test_project_settings_api.py miro_api/test/test_projects_api.py +miro_api/test/test_relationship.py miro_api/test/test_relative_offset.py miro_api/test/test_reset_all_sessions_of_a_user_api.py miro_api/test/test_revoke_token_request.py @@ -1008,6 +1112,7 @@ 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_sharing_policy_settings.py miro_api/test/test_sticky_note_create_request.py miro_api/test/test_sticky_note_data.py @@ -1034,6 +1139,8 @@ miro_api/test/test_team_collaboration_settings.py miro_api/test/test_team_collaboration_settings_changes.py miro_api/test/test_team_copy_access_level_settings.py miro_api/test/test_team_copy_access_level_settings_changes.py +miro_api/test/test_team_group.py +miro_api/test/test_team_groups_page.py miro_api/test/test_team_information.py miro_api/test/test_team_invitation_settings.py miro_api/test/test_team_invitation_settings_changes.py @@ -1047,6 +1154,7 @@ miro_api/test/test_team_settings_api.py miro_api/test/test_team_settings_changes.py miro_api/test/test_team_sharing_policy_settings.py miro_api/test/test_team_sharing_policy_settings_changes.py +miro_api/test/test_team_user_groups_api.py miro_api/test/test_teams_api.py miro_api/test/test_teams_page.py miro_api/test/test_text_create_request.py @@ -1070,6 +1178,7 @@ miro_api/test/test_update_card_style.py miro_api/test/test_update_connector_style.py miro_api/test/test_update_frame_item409_response.py miro_api/test/test_update_frame_style.py +miro_api/test/test_update_group_request.py miro_api/test/test_update_project_member_request.py miro_api/test/test_update_project_request.py miro_api/test/test_update_project_settings_request.py @@ -1077,12 +1186,20 @@ miro_api/test/test_update_shape_style.py miro_api/test/test_update_sticky_note_style.py miro_api/test/test_update_team_settings_request.py miro_api/test/test_update_text_style.py +miro_api/test/test_update_user_group_members_request.py +miro_api/test/test_update_user_group_members_result_error.py +miro_api/test/test_update_user_group_members_result_error_error.py +miro_api/test/test_update_user_group_members_result_inner.py +miro_api/test/test_update_user_group_members_result_operation.py +miro_api/test/test_update_user_group_members_result_success.py miro_api/test/test_upload_file_from_device_data.py miro_api/test/test_user.py +miro_api/test/test_user_group_members_api.py +miro_api/test/test_user_group_to_teams_api.py +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_webhooks_experimental_api.py miro_api/test/test_widget_data_output.py miro_api/test/test_widget_links.py miro_api/test/test_widget_links_platform_containers.py diff --git a/packages/miro-api-python/miro_api/api/__init__.py b/packages/miro-api-python/miro_api/api/__init__.py index 66693847a..beba18e96 100644 --- a/packages/miro-api-python/miro_api/api/__init__.py +++ b/packages/miro-api-python/miro_api/api/__init__.py @@ -28,12 +28,18 @@ from typing import List, Optional from miro_api.models.get_board_item_content_logs_response import GetBoardItemContentLogsResponse -from pydantic import Field, StrictStr +from pydantic import Field, StrictInt, StrictStr from miro_api.models.board_export_job_id import BoardExportJobId from miro_api.models.board_export_job_status import BoardExportJobStatus +from miro_api.models.board_export_job_tasks_list import BoardExportJobTasksList +from miro_api.models.board_export_jobs_list import BoardExportJobsList from miro_api.models.board_export_result import BoardExportResult +from miro_api.models.board_export_task_export_link import BoardExportTaskExportLink from miro_api.models.create_board_export_request import CreateBoardExportRequest +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 @@ -55,8 +61,11 @@ from miro_api.models.shape_item import ShapeItem from miro_api.models.shape_update_request import ShapeUpdateRequest +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 from miro_api.models.legal_hold_response import LegalHoldResponse +from miro_api.models.paginated_case_export_jobs_response import PaginatedCaseExportJobsResponse from miro_api.models.paginated_case_response import PaginatedCaseResponse from miro_api.models.paginated_legal_hold_content_items_response import PaginatedLegalHoldContentItemsResponse from miro_api.models.paginated_legal_hold_response import PaginatedLegalHoldResponse @@ -87,6 +96,10 @@ from miro_api.models.update_project_request import UpdateProjectRequest +from miro_api.models.board_user_group import BoardUserGroup +from miro_api.models.board_user_groups_page import BoardUserGroupsPage +from miro_api.models.create_board_user_groups_request import CreateBoardUserGroupsRequest + 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 @@ -95,16 +108,28 @@ from miro_api.models.team_settings import TeamSettings from miro_api.models.team_settings_changes import TeamSettingsChanges +from miro_api.models.create_team_group_request import CreateTeamGroupRequest +from miro_api.models.team_group import TeamGroup +from miro_api.models.team_groups_page import TeamGroupsPage + from miro_api.models.create_team_request import CreateTeamRequest from miro_api.models.team import Team from miro_api.models.team_changes import TeamChanges from miro_api.models.teams_page import TeamsPage -from miro_api.models.board_subscription import BoardSubscription -from miro_api.models.create_board_subscription_request import CreateBoardSubscriptionRequest -from miro_api.models.generic_subscription import GenericSubscription -from miro_api.models.generic_subscriptions_cursor_paged import GenericSubscriptionsCursorPaged -from miro_api.models.update_board_subscription_request import UpdateBoardSubscriptionRequest +from miro_api.models.create_group_member_request import CreateGroupMemberRequest +from miro_api.models.group_member import GroupMember +from miro_api.models.group_members_page import GroupMembersPage +from miro_api.models.update_user_group_members_request import UpdateUserGroupMembersRequest +from miro_api.models.update_user_group_members_result_inner import UpdateUserGroupMembersResultInner + +from miro_api.models.group_team import GroupTeam +from miro_api.models.group_teams_page import GroupTeamsPage + +from miro_api.models.create_group_request import CreateGroupRequest +from miro_api.models.group import Group +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 @@ -152,7 +177,6 @@ from pydantic import Field, StrictBool, StrictStr from miro_api.models.get_all_groups200_response import GetAllGroups200Response from miro_api.models.get_items_by_group_id200_response import GetItemsByGroupId200Response -from miro_api.models.group import Group from miro_api.models.group_response_short import GroupResponseShort from miro_api.models.image_create_request import ImageCreateRequest @@ -218,7 +242,7 @@ def get_metrics( ) -> List[GetMetrics200ResponseInner]: """Get app metrics - 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
+ 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 app_id: ID of the app to get metrics for. (required) :type app_id: str @@ -356,7 +380,7 @@ def get_metrics_total( ) -> GetMetricsTotal200Response: """Get total app metrics - 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
+ 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 app_id: ID of the app to get total metrics for. (required) :type app_id: str @@ -495,7 +519,7 @@ def enterprise_get_audit_logs( ) -> AuditPage: """Get audit logs - 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 + 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 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 @@ -684,7 +708,7 @@ def enterprise_board_content_item_logs_fetch( ) -> GetBoardItemContentLogsResponse: """Retrieve content change logs of board items - 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 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 @@ -862,7 +886,7 @@ def enterprise_board_export_job_results( ) -> BoardExportResult: """Get results for board export job - 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.

+ 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 @@ -983,7 +1007,7 @@ def enterprise_board_export_job_status( ) -> BoardExportJobStatus: """Get board export job status - 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.

+ 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 @@ -1088,11 +1112,28 @@ def _enterprise_board_export_job_status_serialize( ) @validate_call - def enterprise_create_board_export( + def enterprise_board_export_job_tasks( 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, + 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)], @@ -1102,17 +1143,21 @@ 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 + ) -> BoardExportJobTasksList: + """Get board export job tasks list (Beta) - 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 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: 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 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 @@ -1135,10 +1180,12 @@ def enterprise_create_board_export( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_create_board_export_serialize( + _param = self._enterprise_board_export_job_tasks_serialize( org_id=org_id, - request_id=request_id, - create_board_export_request=create_board_export_request, + job_id=job_id, + status=status, + cursor=cursor, + limit=limit, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1146,7 +1193,7 @@ def enterprise_create_board_export( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardExportJobId", + "200": "BoardExportJobTasksList", "400": None, "401": None, "403": None, @@ -1160,11 +1207,13 @@ def enterprise_create_board_export( response_types_map=_response_types_map, ).data - def _enterprise_create_board_export_serialize( + def _enterprise_board_export_job_tasks_serialize( self, org_id, - request_id, - create_board_export_request, + job_id, + status, + cursor, + limit, _request_auth, _content_type, _headers, @@ -1173,7 +1222,9 @@ def _enterprise_create_board_export_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]] = [] @@ -1185,34 +1236,34 @@ def _enterprise_create_board_export_serialize( # 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 # process the query parameters - if request_id is not None: + if status is not None: - _query_params.append(("request_id", request_id)) + _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 - 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}/boards/export/jobs/{job_id}/tasks", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1226,11 +1277,30 @@ def _enterprise_create_board_export_serialize( ) @validate_call - def enterprise_dataclassification_board_get( + 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 retrieve.")], + 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)], @@ -1240,17 +1310,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 + ) -> BoardExportJobsList: + """Get board export jobs list (Beta) - 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 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 retrieve. (required) - :type board_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. + :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 @@ -1273,10 +1347,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_jobs_serialize( org_id=org_id, - team_id=team_id, - board_id=board_id, + status=status, + creator_id=creator_id, + cursor=cursor, + limit=limit, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1284,7 +1360,7 @@ def enterprise_dataclassification_board_get( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardDataClassificationLabel", + "200": "BoardExportJobsList", "400": None, "401": None, "403": None, @@ -1298,11 +1374,13 @@ def enterprise_dataclassification_board_get( response_types_map=_response_types_map, ).data - def _enterprise_dataclassification_board_get_serialize( + def _enterprise_board_export_jobs_serialize( self, org_id, - team_id, - board_id, + status, + creator_id, + cursor, + limit, _request_auth, _content_type, _headers, @@ -1311,7 +1389,10 @@ def _enterprise_dataclassification_board_get_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]] = [] @@ -1323,11 +1404,23 @@ 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 # 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 @@ -1340,7 +1433,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", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1354,12 +1447,11 @@ def _enterprise_dataclassification_board_get_serialize( ) @validate_call - def enterprise_dataclassification_board_set( + def enterprise_create_board_export( 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.")], + 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)], @@ -1369,19 +1461,17 @@ 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 + ) -> BoardExportJobId: + """Create board export job - 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.

+ 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 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 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 @@ -1404,11 +1494,10 @@ def enterprise_dataclassification_board_set( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_dataclassification_board_set_serialize( + _param = self._enterprise_create_board_export_serialize( org_id=org_id, - team_id=team_id, - board_id=board_id, - data_classification_label_id=data_classification_label_id, + request_id=request_id, + create_board_export_request=create_board_export_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1416,11 +1505,12 @@ def enterprise_dataclassification_board_set( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardDataClassificationLabel", + "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) @@ -1430,12 +1520,11 @@ def enterprise_dataclassification_board_set( response_types_map=_response_types_map, ).data - def _enterprise_dataclassification_board_set_serialize( + def _enterprise_create_board_export_serialize( self, org_id, - team_id, - board_id, - data_classification_label_id, + request_id, + create_board_export_request, _request_auth, _content_type, _headers, @@ -1456,16 +1545,16 @@ 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 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 data_classification_label_id is not None: - _body_params = data_classification_label_id + 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"]) @@ -1483,7 +1572,7 @@ def _enterprise_dataclassification_board_set_serialize( return self.api_client.param_serialize( method="POST", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/boards/{board_id}/data-classification", + resource_path="/v2/orgs/{org_id}/boards/export/jobs", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1497,9 +1586,11 @@ def _enterprise_dataclassification_board_set_serialize( ) @validate_call - def enterprise_dataclassification_organization_settings_get( + def enterprise_create_board_export_task_export_link( self, - org_id: Annotated[StrictStr, Field(description="id of the organization")], + 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)], @@ -1509,13 +1600,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 + ) -> BoardExportTaskExportLink: + """Create task export link (Beta) - 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 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 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 @@ -1538,8 +1633,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_task_export_link_serialize( org_id=org_id, + job_id=job_id, + task_id=task_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1547,11 +1644,12 @@ def enterprise_dataclassification_organization_settings_get( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "DataClassificationOrganizationSettings", + "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) @@ -1561,9 +1659,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_task_export_link_serialize( self, org_id, + job_id, + task_id, _request_auth, _content_type, _headers, @@ -1584,6 +1684,10 @@ def _enterprise_dataclassification_organization_settings_get_serialize( # 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 task_id is not None: + _path_params["task_id"] = task_id # process the query parameters # process the header parameters # process the form parameters @@ -1596,8 +1700,8 @@ def _enterprise_dataclassification_organization_settings_get_serialize( _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/{job_id}/tasks/{task_id}/export-link", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1611,11 +1715,11 @@ def _enterprise_dataclassification_organization_settings_get_serialize( ) @validate_call - def enterprise_dataclassification_team_boards_bulk( + 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")], - 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.")], + enterprise_update_board_export_job_request: Optional[EnterpriseUpdateBoardExportJobRequest] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -1625,17 +1729,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 + ) -> EnterpriseUpdateBoardExportJob200Response: + """Update board export job status (Beta) - 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.

+ 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 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 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 @@ -1658,10 +1762,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_update_board_export_job_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, + enterprise_update_board_export_job_request=enterprise_update_board_export_job_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1669,7 +1773,7 @@ def enterprise_dataclassification_team_boards_bulk( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "UpdateBoardsDataClassificationLabel", + "200": "EnterpriseUpdateBoardExportJob200Response", "400": None, "401": None, "403": None, @@ -1683,11 +1787,11 @@ def enterprise_dataclassification_team_boards_bulk( response_types_map=_response_types_map, ).data - def _enterprise_dataclassification_team_boards_bulk_serialize( + def _enterprise_update_board_export_job_serialize( self, org_id, - team_id, - update_boards_data_classification_label_request, + job_id, + enterprise_update_board_export_job_request, _request_auth, _content_type, _headers, @@ -1708,14 +1812,14 @@ 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 # 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 + 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"]) @@ -1732,8 +1836,8 @@ def _enterprise_dataclassification_team_boards_bulk_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="PATCH", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/data-classification", + 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, @@ -1747,10 +1851,11 @@ def _enterprise_dataclassification_team_boards_bulk_serialize( ) @validate_call - def enterprise_dataclassification_team_settings_get( + 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")], + 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)], @@ -1760,16 +1865,18 @@ 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 + ) -> BoardDataClassificationLabel: + """Get board classification - 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.

+ 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 _request_timeout: timeout setting for this request. If one + :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 (connection, read) timeouts. @@ -1791,9 +1898,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_dataclassification_board_get_serialize( org_id=org_id, team_id=team_id, + board_id=board_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1801,7 +1909,7 @@ def enterprise_dataclassification_team_settings_get( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "DataClassificationTeamSettings", + "200": "BoardDataClassificationLabel", "400": None, "401": None, "403": None, @@ -1815,10 +1923,11 @@ def enterprise_dataclassification_team_settings_get( response_types_map=_response_types_map, ).data - def _enterprise_dataclassification_team_settings_get_serialize( + def _enterprise_dataclassification_board_get_serialize( self, org_id, team_id, + board_id, _request_auth, _content_type, _headers, @@ -1841,6 +1950,8 @@ def _enterprise_dataclassification_team_settings_get_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 @@ -1854,7 +1965,7 @@ def _enterprise_dataclassification_team_settings_get_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/data-classification-settings", + 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, @@ -1868,11 +1979,12 @@ def _enterprise_dataclassification_team_settings_get_serialize( ) @validate_call - def enterprise_dataclassification_team_settings_set( + def enterprise_dataclassification_board_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, + 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)], @@ -1882,17 +1994,19 @@ 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: + """Update 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.

+ 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 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 update. (required) + :type board_id: str + :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 @@ -1915,10 +2029,11 @@ 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_set_serialize( org_id=org_id, team_id=team_id, - update_team_settings_request=update_team_settings_request, + board_id=board_id, + data_classification_label_id=data_classification_label_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1926,7 +2041,7 @@ def enterprise_dataclassification_team_settings_set( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "DataClassificationTeamSettings", + "200": "BoardDataClassificationLabel", "400": None, "401": None, "403": None, @@ -1940,11 +2055,12 @@ def enterprise_dataclassification_team_settings_set( response_types_map=_response_types_map, ).data - def _enterprise_dataclassification_team_settings_set_serialize( + def _enterprise_dataclassification_board_set_serialize( self, org_id, team_id, - update_team_settings_request, + board_id, + data_classification_label_id, _request_auth, _content_type, _headers, @@ -1967,12 +2083,14 @@ 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 + 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"]) @@ -1989,8 +2107,8 @@ def _enterprise_dataclassification_team_settings_set_serialize( _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="POST", + 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, @@ -2004,12 +2122,9 @@ def _enterprise_dataclassification_team_settings_set_serialize( ) @validate_call - def create_items( + 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.") - ], - item_create: Annotated[List[ItemCreate], Field(min_length=1, max_length=20)], + org_id: Annotated[StrictStr, Field(description="id of the organization")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2019,15 +2134,13 @@ 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 + ) -> DataClassificationOrganizationSettings: + """Get organization settings - 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. + 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 item_create: (required) - :type item_create: List[ItemCreate] + :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 @@ -2050,9 +2163,8 @@ def create_items( :return: Returns the result object. """ # noqa: E501 - _param = self._create_items_serialize( - board_id=board_id, - item_create=item_create, + _param = self._enterprise_dataclassification_organization_settings_get_serialize( + org_id=org_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2060,9 +2172,12 @@ def create_items( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "Items", - "400": "BulkOperationError", - "429": "Error", + "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() @@ -2071,10 +2186,9 @@ def create_items( response_types_map=_response_types_map, ).data - def _create_items_serialize( + def _enterprise_dataclassification_organization_settings_get_serialize( self, - board_id, - item_create, + org_id, _request_auth, _content_type, _headers, @@ -2083,9 +2197,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]] = [] @@ -2095,32 +2207,22 @@ def _create_items_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 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"]) - # 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}/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, @@ -2134,21 +2236,11 @@ def _create_items_serialize( ) @validate_call - def create_items_in_bulk_using_file_from_device( + def enterprise_dataclassification_team_boards_bulk( 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")], + 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)], @@ -2158,17 +2250,17 @@ 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 + ) -> UpdateBoardsDataClassificationLabel: + """Bulk update boards classification - 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
+ 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 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 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 @@ -2191,10 +2283,10 @@ 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_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, @@ -2202,7 +2294,12 @@ def create_items_in_bulk_using_file_from_device( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "Items", + "200": "UpdateBoardsDataClassificationLabel", + "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() @@ -2211,11 +2308,11 @@ 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_team_boards_bulk_serialize( self, - board_id, - data, - resources, + org_id, + team_id, + update_boards_data_classification_label_request, _request_auth, _content_type, _headers, @@ -2224,9 +2321,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]] = [] @@ -2236,16 +2331,16 @@ 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 + 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: - _files["data"] = data - if resources is not None: - _files["resources"] = resources # 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"]) @@ -2254,7 +2349,7 @@ def _create_items_in_bulk_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 @@ -2262,8 +2357,8 @@ def _create_items_in_bulk_using_file_from_device_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/boards/{board_id_Platformcreateitemsinbulkusingfilefromdevice}/items/bulk", + 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, @@ -2277,12 +2372,10 @@ def _create_items_in_bulk_using_file_from_device_serialize( ) @validate_call - def create_shape_item_flowchart( + def enterprise_dataclassification_team_settings_get( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") - ], - shape_create_request: ShapeCreateRequest, + 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)], @@ -2292,15 +2385,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 + ) -> DataClassificationTeamSettings: + """Get team settings - Adds a flowchart shape item to a board.

Required scope

boards:write

Rate limiting

Level 2
+ 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 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 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 @@ -2323,9 +2416,9 @@ def create_shape_item_flowchart( :return: Returns the result object. """ # noqa: E501 - _param = self._create_shape_item_flowchart_serialize( - board_id=board_id, - shape_create_request=shape_create_request, + _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, @@ -2333,10 +2426,12 @@ def create_shape_item_flowchart( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "ShapeItem", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "200": "DataClassificationTeamSettings", + "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() @@ -2345,10 +2440,10 @@ def create_shape_item_flowchart( response_types_map=_response_types_map, ).data - def _create_shape_item_flowchart_serialize( + def _enterprise_dataclassification_team_settings_get_serialize( self, - board_id, - shape_create_request, + org_id, + team_id, _request_auth, _content_type, _headers, @@ -2367,32 +2462,24 @@ def _create_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 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 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="GET", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/data-classification-settings", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2406,12 +2493,11 @@ def _create_shape_item_flowchart_serialize( ) @validate_call - def delete_shape_item_flowchart( + def enterprise_dataclassification_team_settings_set( 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="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)], @@ -2421,15 +2507,17 @@ 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 + ) -> DataClassificationTeamSettings: + """Update team settings - Deletes a flowchart shape item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ 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 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: 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 @@ -2452,9 +2540,10 @@ def delete_shape_item_flowchart( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_shape_item_flowchart_serialize( - board_id=board_id, - item_id=item_id, + _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, @@ -2462,10 +2551,12 @@ def delete_shape_item_flowchart( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "200": "DataClassificationTeamSettings", + "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() @@ -2474,10 +2565,11 @@ def delete_shape_item_flowchart( response_types_map=_response_types_map, ).data - def _delete_shape_item_flowchart_serialize( + def _enterprise_dataclassification_team_settings_set_serialize( self, - board_id, - item_id, + org_id, + team_id, + update_team_settings_request, _request_auth, _content_type, _headers, @@ -2496,24 +2588,34 @@ def _delete_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 + 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/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="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, @@ -2527,17 +2629,12 @@ def _delete_shape_item_flowchart_serialize( ) @validate_call - def get_items_experimental( + def create_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." - ), + 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, + item_create: Annotated[List[ItemCreate], Field(min_length=1, max_length=20)], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2547,19 +2644,15 @@ 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 + ) -> Items: + """Create items in bulk - 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 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 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 where you want to create the item. (required) :type board_id: str - :param limit: - :type limit: str - :param type: - :type type: str - :param cursor: - :type cursor: 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 @@ -2582,11 +2675,9 @@ def get_items_experimental( :return: Returns the result object. """ # noqa: E501 - _param = self._get_items_experimental_serialize( + _param = self._create_items_serialize( board_id=board_id, - limit=limit, - type=type, - cursor=cursor, + item_create=item_create, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2594,10 +2685,9 @@ def get_items_experimental( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GenericItemCursorPaged", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "201": "Items", + "400": "BulkOperationError", + "429": "Error", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -2606,12 +2696,10 @@ def get_items_experimental( response_types_map=_response_types_map, ).data - def _get_items_experimental_serialize( + def _create_items_serialize( self, board_id, - limit, - type, - cursor, + item_create, _request_auth, _content_type, _headers, @@ -2620,7 +2708,9 @@ def _get_items_experimental_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]] = [] @@ -2633,31 +2723,29 @@ def _get_items_experimental_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 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 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"]) + # 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", + method="POST", + resource_path="/v2/boards/{board_id}/items/bulk", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2671,14 +2759,20 @@ def _get_items_experimental_serialize( ) @validate_call - def get_shape_item_flowchart( + def create_items_in_bulk_using_file_from_device( self, board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific 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 retrieve.") + 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."), ], _request_timeout: Union[ None, @@ -2689,15 +2783,17 @@ 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 + ) -> Items: + """Create items in bulk using file from device - Retrieves information for a specific shape item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ 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 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 the 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 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 @@ -2720,9 +2816,10 @@ def get_shape_item_flowchart( :return: Returns the result object. """ # noqa: E501 - _param = self._get_shape_item_flowchart_serialize( + _param = self._create_items_in_bulk_using_file_from_device_serialize( board_id=board_id, - item_id=item_id, + data=data, + resources=resources, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2730,10 +2827,7 @@ def get_shape_item_flowchart( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ShapeItem", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "201": "Items", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -2742,10 +2836,11 @@ def get_shape_item_flowchart( response_types_map=_response_types_map, ).data - def _get_shape_item_flowchart_serialize( + def _create_items_in_bulk_using_file_from_device_serialize( self, board_id, - item_id, + data, + resources, _request_auth, _content_type, _headers, @@ -2754,7 +2849,9 @@ def _get_shape_item_flowchart_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]] = [] @@ -2766,22 +2863,32 @@ def _get_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 + 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="GET", - resource_path="/v2-experimental/boards/{board_id}/shapes/{item_id}", + method="POST", + resource_path="/v2/boards/{board_id_Platformcreateitemsinbulkusingfilefromdevice}/items/bulk", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2795,15 +2902,12 @@ def _get_shape_item_flowchart_serialize( ) @validate_call - def get_specific_item_experimental( + def create_shape_item_flowchart( 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 the item.") ], + shape_create_request: ShapeCreateRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2813,15 +2917,15 @@ 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 + ) -> ShapeItem: + """Create shape item - Retrieves information for a specific item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ Adds a flowchart shape item 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 the 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 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 @@ -2844,9 +2948,9 @@ def get_specific_item_experimental( :return: Returns the result object. """ # noqa: E501 - _param = self._get_specific_item_experimental_serialize( + _param = self._create_shape_item_flowchart_serialize( board_id=board_id, - item_id=item_id, + shape_create_request=shape_create_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2854,7 +2958,7 @@ def get_specific_item_experimental( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GenericItem", + "201": "ShapeItem", "400": "CreateFrameItem400Response", "404": "CreateFrameItem400Response", "429": "CreateFrameItem400Response", @@ -2866,10 +2970,10 @@ def get_specific_item_experimental( response_types_map=_response_types_map, ).data - def _get_specific_item_experimental_serialize( + def _create_shape_item_flowchart_serialize( self, board_id, - item_id, + shape_create_request, _request_auth, _content_type, _headers, @@ -2890,22 +2994,30 @@ def _get_specific_item_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 # 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="GET", - resource_path="/v2-experimental/boards/{board_id}/items/{item_id}", + method="POST", + resource_path="/v2-experimental/boards/{board_id}/shapes", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2919,13 +3031,12 @@ def _get_specific_item_experimental_serialize( ) @validate_call - def update_shape_item_flowchart( + def delete_shape_item_flowchart( 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.")], - shape_update_request: ShapeUpdateRequest, + 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)], @@ -2935,17 +3046,15 @@ 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 shape item - 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 flowchart shape 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 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 @@ -2968,10 +3077,9 @@ def update_shape_item_flowchart( :return: Returns the result object. """ # noqa: E501 - _param = self._update_shape_item_flowchart_serialize( + _param = self._delete_shape_item_flowchart_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, @@ -2979,7 +3087,7 @@ def update_shape_item_flowchart( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ShapeItem", + "204": "object", "400": "CreateFrameItem400Response", "404": "CreateFrameItem400Response", "429": "CreateFrameItem400Response", @@ -2991,11 +3099,10 @@ def update_shape_item_flowchart( response_types_map=_response_types_map, ).data - def _update_shape_item_flowchart_serialize( + def _delete_shape_item_flowchart_serialize( self, board_id, item_id, - shape_update_request, _request_auth, _content_type, _headers, @@ -3022,25 +3129,15 @@ def _update_shape_item_flowchart_serialize( # 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", + method="DELETE", resource_path="/v2-experimental/boards/{board_id}/shapes/{item_id}", path_params=_path_params, query_params=_query_params, @@ -3055,23 +3152,17 @@ def _update_shape_item_flowchart_serialize( ) @validate_call - def get_all_cases( + def get_items_experimental( self, - limit: Annotated[ - int, Field(le=100, strict=True, ge=1, description="The maximum number of items in the result list.") - ], - org_id: Annotated[ - str, + board_id: Annotated[ + StrictStr, Field( - strict=True, description="The ID of the organization for which you want to retrieve the list of cases." + description="Unique identifier (ID) of the board for which you want to retrieve the list of available items." ), ], - 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, + 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)], @@ -3081,16 +3172,18 @@ 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 + ) -> GenericItemCursorPaged: + """Get items on board - 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. + 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 limit: The maximum number of items in the result list. (required) - :type limit: int - :param org_id: The ID of the organization for which you want to retrieve the list of cases. (required) - :type org_id: str - :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. + :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 @@ -3114,9 +3207,10 @@ def get_all_cases( :return: Returns the result object. """ # noqa: E501 - _param = self._get_all_cases_serialize( + _param = self._get_items_experimental_serialize( + board_id=board_id, limit=limit, - org_id=org_id, + type=type, cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, @@ -3125,12 +3219,10 @@ def get_all_cases( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "PaginatedCaseResponse", - "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() @@ -3139,10 +3231,11 @@ def get_all_cases( response_types_map=_response_types_map, ).data - def _get_all_cases_serialize( + def _get_items_experimental_serialize( self, + board_id, limit, - org_id, + type, cursor, _request_auth, _content_type, @@ -3162,13 +3255,17 @@ 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 type is not None: + + _query_params.append(("type", type)) + if cursor is not None: _query_params.append(("cursor", cursor)) @@ -3185,7 +3282,7 @@ def _get_all_cases_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/cases", + resource_path="/v2-experimental/boards/{board_id}/items", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3199,30 +3296,15 @@ def _get_all_cases_serialize( ) @validate_call - def get_all_legal_holds( + def get_shape_item_flowchart( self, - limit: Annotated[ - int, Field(le=100, strict=True, ge=1, description="The maximum number of items in the result list.") - ], - 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.", - ), + board_id: Annotated[ + StrictStr, + Field(description="Unique identifier (ID) of the board from which you want to retrieve a specific item."), ], - case_id: Annotated[ - str, - Field( - strict=True, description="The ID of the case for which you want to retrieve the list of legal holds." - ), + item_id: Annotated[ + StrictStr, Field(description="Unique identifier (ID) of the item that you want to retrieve.") ], - 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)], @@ -3232,19 +3314,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 + ) -> ShapeItem: + """Get shape 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. + Retrieves information for a specific shape item on a board.

Required scope

boards:read

Rate limiting

Level 1
- :param limit: The maximum number of items in the result list. (required) - :type limit: int - :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 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 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 @@ -3267,11 +3345,9 @@ def get_all_legal_holds( :return: Returns the result object. """ # noqa: E501 - _param = self._get_all_legal_holds_serialize( - limit=limit, - org_id=org_id, - case_id=case_id, - cursor=cursor, + _param = self._get_shape_item_flowchart_serialize( + board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3279,12 +3355,10 @@ def get_all_legal_holds( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "PaginatedLegalHoldResponse", - "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() @@ -3293,12 +3367,10 @@ def get_all_legal_holds( response_types_map=_response_types_map, ).data - def _get_all_legal_holds_serialize( + def _get_shape_item_flowchart_serialize( self, - limit, - org_id, - case_id, - cursor, + board_id, + item_id, _request_auth, _content_type, _headers, @@ -3317,19 +3389,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 @@ -3342,7 +3406,7 @@ def _get_all_legal_holds_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/cases/{case_id}/legal-holds", + resource_path="/v2-experimental/boards/{board_id}/shapes/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3356,16 +3420,15 @@ def _get_all_legal_holds_serialize( ) @validate_call - def get_case( + def get_specific_item_experimental( 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)], @@ -3375,15 +3438,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 + ) -> GenericItem: + """Get specific item on board - 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 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 @@ -3406,9 +3469,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_specific_item_experimental_serialize( + board_id=board_id, + item_id=item_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3416,12 +3479,10 @@ def get_case( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "CaseResponse", - "400": None, - "401": None, - "403": None, - "404": 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() @@ -3430,10 +3491,10 @@ def get_case( response_types_map=_response_types_map, ).data - def _get_case_serialize( + def _get_specific_item_experimental_serialize( self, - org_id, - case_id, + board_id, + item_id, _request_auth, _content_type, _headers, @@ -3452,10 +3513,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 @@ -3469,7 +3530,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}/items/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3483,22 +3544,13 @@ def _get_case_serialize( ) @validate_call - def get_legal_hold( + def update_shape_item_flowchart( 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, - Field( - strict=True, description="The ID of the case for which you want to retrieve 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 retrieve.")], + 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)], @@ -3508,17 +3560,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 + ) -> ShapeItem: + """Update shape item - 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. + 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 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 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 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 @@ -3541,10 +3593,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._update_shape_item_flowchart_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, @@ -3552,12 +3604,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": "ShapeItem", + "400": "CreateFrameItem400Response", + "404": "CreateFrameItem400Response", + "429": "CreateFrameItem400Response", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -3566,11 +3616,11 @@ def get_legal_hold( response_types_map=_response_types_map, ).data - def _get_legal_hold_serialize( + def _update_shape_item_flowchart_serialize( self, - org_id, - case_id, - legal_hold_id, + board_id, + item_id, + shape_update_request, _request_auth, _content_type, _headers, @@ -3589,26 +3639,34 @@ 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 + 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="GET", - resource_path="/v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}", + method="PATCH", + resource_path="/v2-experimental/boards/{board_id}/shapes/{item_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3622,38 +3680,12 @@ def _get_legal_hold_serialize( ) @validate_call - def get_legal_hold_content_items( + def create_case( 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.", - ), - ], - limit: Annotated[ - int, Field(le=100, strict=True, ge=1, description="The maximum number of items in the result list.") + str, Field(strict=True, description="The ID of the organization in which you want to create a new case.") ], - 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, + case_request: CaseRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3663,21 +3695,15 @@ 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 + ) -> CaseResponse: + """Create case - 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. + 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 the organization for which you want to retrieve the list of content items under hold. (required) + :param org_id: The ID of the organization in which you want to create a new case. (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. (required) - :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 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 @@ -3700,12 +3726,9 @@ def get_legal_hold_content_items( :return: Returns the result object. """ # noqa: E501 - _param = self._get_legal_hold_content_items_serialize( + _param = self._create_case_serialize( org_id=org_id, - case_id=case_id, - legal_hold_id=legal_hold_id, - limit=limit, - cursor=cursor, + case_request=case_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3713,7 +3736,7 @@ def get_legal_hold_content_items( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "PaginatedLegalHoldContentItemsResponse", + "200": "CaseResponse", "400": None, "401": None, "403": None, @@ -3727,13 +3750,10 @@ def get_legal_hold_content_items( response_types_map=_response_types_map, ).data - def _get_legal_hold_content_items_serialize( + def _create_case_serialize( self, org_id, - case_id, - legal_hold_id, - limit, - cursor, + case_request, _request_auth, _content_type, _headers, @@ -3754,32 +3774,30 @@ def _get_legal_hold_content_items_serialize( # 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 # 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}/cases/{case_id}/legal-holds/{legal_hold_id}/content-items", + method="POST", + resource_path="/v2/orgs/{org_id}/cases", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3793,12 +3811,16 @@ def _get_legal_hold_content_items_serialize( ) @validate_call - def create_mindmap_nodes_experimental( + def create_legal_hold( self, - board_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the board where you want to create the item.") + org_id: Annotated[ + str, + Field(strict=True, description="The ID of the organization in which you want to create a new legal hold."), ], - mindmap_create_request: MindmapCreateRequest, + 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)], @@ -3808,15 +3830,17 @@ 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 + ) -> LegalHoldResponse: + """Create legal hold - 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. + 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 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 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 _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 @@ -3839,9 +3863,10 @@ def create_mindmap_nodes_experimental( :return: Returns the result object. """ # noqa: E501 - _param = self._create_mindmap_nodes_experimental_serialize( - board_id=board_id, - mindmap_create_request=mindmap_create_request, + _param = self._create_legal_hold_serialize( + org_id=org_id, + case_id=case_id, + legal_hold_request=legal_hold_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3849,10 +3874,12 @@ def create_mindmap_nodes_experimental( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "MindmapItem", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "200": "LegalHoldResponse", + "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() @@ -3861,10 +3888,11 @@ def create_mindmap_nodes_experimental( response_types_map=_response_types_map, ).data - def _create_mindmap_nodes_experimental_serialize( + def _create_legal_hold_serialize( self, - board_id, - mindmap_create_request, + org_id, + case_id, + legal_hold_request, _request_auth, _content_type, _headers, @@ -3883,14 +3911,16 @@ def _create_mindmap_nodes_experimental_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 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 mindmap_create_request is not None: - _body_params = mindmap_create_request + 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"]) @@ -3908,7 +3938,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/orgs/{org_id}/cases/{case_id}/legal-holds", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3922,15 +3952,12 @@ def _create_mindmap_nodes_experimental_serialize( ) @validate_call - def delete_mindmap_node_experimental( + def delete_case( self, - 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.") + 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)], @@ -3940,15 +3967,15 @@ def delete_mindmap_node_experimental( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Delete mind map node + ) -> None: + """Close case - Deletes a mind map node item and its child nodes from the board.

Required scope

boards:write

Rate limiting

Level 3
+ 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 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 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 _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 @@ -3971,9 +3998,9 @@ def delete_mindmap_node_experimental( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_mindmap_node_experimental_serialize( - board_id=board_id, - item_id=item_id, + _param = self._delete_case_serialize( + org_id=org_id, + case_id=case_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3981,10 +4008,12 @@ def delete_mindmap_node_experimental( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "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() @@ -3993,10 +4022,10 @@ def delete_mindmap_node_experimental( response_types_map=_response_types_map, ).data - def _delete_mindmap_node_experimental_serialize( + def _delete_case_serialize( self, - board_id, - item_id, + org_id, + case_id, _request_auth, _content_type, _headers, @@ -4015,24 +4044,21 @@ def _delete_mindmap_node_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 + if org_id is not None: + _path_params["org_id"] = org_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="DELETE", - resource_path="/v2-experimental/boards/{board_id}/mindmap_nodes/{item_id}", + resource_path="/v2/orgs/{org_id}/cases/{case_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -4046,15 +4072,15 @@ def _delete_mindmap_node_experimental_serialize( ) @validate_call - def get_mindmap_node_experimental( + def delete_legal_hold( self, - board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to retrieve a mind map node."), + org_id: Annotated[ + str, Field(strict=True, description="The ID of the organization in which you want to close a legal hold.") ], - item_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the mind map node that you want to retrieve.") + 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)], @@ -4064,15 +4090,17 @@ 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 + ) -> None: + """Close legal hold - Retrieves information for a specific mind map node on a board.

Required scope

boards:read

Rate limiting

Level 1
+ 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 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 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 _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 @@ -4095,9 +4123,10 @@ def get_mindmap_node_experimental( :return: Returns the result object. """ # noqa: E501 - _param = self._get_mindmap_node_experimental_serialize( - board_id=board_id, - item_id=item_id, + _param = self._delete_legal_hold_serialize( + org_id=org_id, + case_id=case_id, + legal_hold_id=legal_hold_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4105,7 +4134,12 @@ def get_mindmap_node_experimental( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "MindmapItem", + "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() @@ -4114,10 +4148,11 @@ def get_mindmap_node_experimental( response_types_map=_response_types_map, ).data - def _get_mindmap_node_experimental_serialize( + def _delete_legal_hold_serialize( self, - board_id, - item_id, + org_id, + case_id, + legal_hold_id, _request_auth, _content_type, _headers, @@ -4136,24 +4171,23 @@ def _get_mindmap_node_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 + 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 # 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-experimental/boards/{board_id}/mindmap_nodes/{item_id}", + 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, @@ -4167,16 +4201,16 @@ def _get_mindmap_node_experimental_serialize( ) @validate_call - def get_mindmap_nodes_experimental( + def edit_case( self, - board_id: Annotated[ - StrictStr, - Field(description="Unique identifier (ID) of the board from which you want to retrieve mind map nodes."), + org_id: Annotated[ + str, + Field( + strict=True, description="The ID of the organization for which you want to edit the case information." + ), ], - 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, + 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)], @@ -4186,17 +4220,17 @@ 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 + ) -> CaseResponse: + """Edit case - 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
+ 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 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 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 _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 @@ -4219,10 +4253,10 @@ def get_mindmap_nodes_experimental( :return: Returns the result object. """ # noqa: E501 - _param = self._get_mindmap_nodes_experimental_serialize( - board_id=board_id, - limit=limit, - cursor=cursor, + _param = self._edit_case_serialize( + org_id=org_id, + case_id=case_id, + case_request=case_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4230,7 +4264,12 @@ def get_mindmap_nodes_experimental( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "MindmapCursorPaged", + "200": "CaseResponse", + "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() @@ -4239,11 +4278,11 @@ def get_mindmap_nodes_experimental( response_types_map=_response_types_map, ).data - def _get_mindmap_nodes_experimental_serialize( + def _edit_case_serialize( self, - board_id, - limit, - cursor, + org_id, + case_id, + case_request, _request_auth, _content_type, _headers, @@ -4262,30 +4301,34 @@ def _get_mindmap_nodes_experimental_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 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 + 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-experimental/boards/{board_id}/mindmap_nodes", + method="PUT", + resource_path="/v2/orgs/{org_id}/cases/{case_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -4299,9 +4342,21 @@ def _get_mindmap_nodes_experimental_serialize( ) @validate_call - def revoke_token_v2( + def edit_legal_hold( self, - revoke_token_request: RevokeTokenRequest, + 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)], @@ -4311,13 +4366,19 @@ 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) + ) -> LegalHoldResponse: + """Edit legal hold - 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. + 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 revoke_token_request: (required) - :type revoke_token_request: RevokeTokenRequest + :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 _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 @@ -4340,8 +4401,11 @@ 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._edit_legal_hold_serialize( + org_id=org_id, + 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, @@ -4349,8 +4413,12 @@ def revoke_token_v2( ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "404": "ErrorResponse", + "200": "LegalHoldResponse", + "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() @@ -4359,9 +4427,12 @@ def revoke_token_v2( response_types_map=_response_types_map, ).data - def _revoke_token_v2_serialize( + def _edit_legal_hold_serialize( self, - revoke_token_request, + org_id, + case_id, + legal_hold_id, + legal_hold_request, _request_auth, _content_type, _headers, @@ -4380,12 +4451,18 @@ def _revoke_token_v2_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 # 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 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"]) @@ -4402,8 +4479,8 @@ def _revoke_token_v2_serialize( _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="POST", - resource_path="/v2/oauth/revoke", + 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, @@ -4417,10 +4494,24 @@ def _revoke_token_v2_serialize( ) @validate_call - def enterprise_get_organization_member( + def get_all_cases( self, - org_id: Annotated[StrictStr, Field(description="id of the organization")], - member_id: Annotated[StrictStr, Field(description="id of the organization member")], + 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)], @@ -4430,15 +4521,17 @@ 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 + ) -> PaginatedCaseResponse: + """Get all cases - 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.

+ 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: id of the 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 member_id: id of the organization member (required) - :type member_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 @@ -4461,9 +4554,10 @@ def enterprise_get_organization_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_organization_member_serialize( + _param = self._get_all_cases_serialize( org_id=org_id, - member_id=member_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4471,12 +4565,11 @@ def enterprise_get_organization_member( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "OrganizationMember", + "200": "PaginatedCaseResponse", "400": None, "401": None, "403": None, "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -4486,10 +4579,11 @@ def enterprise_get_organization_member( response_types_map=_response_types_map, ).data - def _enterprise_get_organization_member_serialize( + def _get_all_cases_serialize( self, org_id, - member_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -4510,9 +4604,15 @@ def _enterprise_get_organization_member_serialize( # 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 # 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 @@ -4525,7 +4625,7 @@ def _enterprise_get_organization_member_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/members/{member_id}", + resource_path="/v2/orgs/{org_id}/cases", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -4539,15 +4639,31 @@ def _enterprise_get_organization_member_serialize( ) @validate_call - def enterprise_get_organization_members( + def get_all_legal_holds( 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, + 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)], @@ -4557,25 +4673,19 @@ 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 + ) -> PaginatedLegalHoldResponse: + """Get all legal holds within a case - 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.

+ 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: id of the 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 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: + :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 @@ -4598,14 +4708,11 @@ def enterprise_get_organization_members( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_organization_members_serialize( + _param = self._get_all_legal_holds_serialize( org_id=org_id, - emails=emails, - role=role, - license=license, - active=active, - cursor=cursor, + case_id=case_id, limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4613,12 +4720,11 @@ def enterprise_get_organization_members( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "EnterpriseGetOrganizationMembers200Response", + "200": "PaginatedLegalHoldResponse", "400": None, "401": None, "403": None, "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -4628,15 +4734,12 @@ def enterprise_get_organization_members( response_types_map=_response_types_map, ).data - def _enterprise_get_organization_members_serialize( + def _get_all_legal_holds_serialize( self, org_id, - emails, - role, - license, - active, - cursor, + case_id, limit, + cursor, _request_auth, _content_type, _headers, @@ -4657,31 +4760,17 @@ def _enterprise_get_organization_members_serialize( # 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 # 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: + if limit is not None: - _query_params.append(("active", active)) + _query_params.append(("limit", limit)) 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 @@ -4694,7 +4783,7 @@ def _enterprise_get_organization_members_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/members", + resource_path="/v2/orgs/{org_id}/cases/{case_id}/legal-holds", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -4708,9 +4797,16 @@ def _enterprise_get_organization_members_serialize( ) @validate_call - def enterprise_get_organization( + def get_case( self, - org_id: Annotated[StrictStr, Field(description="id of the organization")], + 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)], @@ -4720,13 +4816,15 @@ 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 + ) -> CaseResponse: + """Get case - 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.

+ 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: id of the 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 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 @@ -4749,8 +4847,9 @@ def enterprise_get_organization( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_organization_serialize( + _param = self._get_case_serialize( org_id=org_id, + case_id=case_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4758,12 +4857,11 @@ def enterprise_get_organization( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Organization", + "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) @@ -4773,9 +4871,10 @@ def enterprise_get_organization( response_types_map=_response_types_map, ).data - def _enterprise_get_organization_serialize( + def _get_case_serialize( self, org_id, + case_id, _request_auth, _content_type, _headers, @@ -4796,6 +4895,8 @@ def _enterprise_get_organization_serialize( # 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 # process the query parameters # process the header parameters # process the form parameters @@ -4809,7 +4910,7 @@ def _enterprise_get_organization_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}", + resource_path="/v2/orgs/{org_id}/cases/{case_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -4823,12 +4924,22 @@ def _enterprise_get_organization_serialize( ) @validate_call - def enterprise_add_project_member( + def get_legal_hold( 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, + 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)], @@ -4838,19 +4949,17 @@ 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 + ) -> LegalHoldResponse: + """Get legal hold information - Add a Miro user to a project.

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 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 the organization to which the project belongs. (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 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 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 @@ -4873,11 +4982,10 @@ def enterprise_add_project_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_add_project_member_serialize( + _param = self._get_legal_hold_serialize( org_id=org_id, - team_id=team_id, - project_id=project_id, - add_project_member_request=add_project_member_request, + case_id=case_id, + legal_hold_id=legal_hold_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4885,13 +4993,12 @@ def enterprise_add_project_member( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "ProjectMember", - "400": "Error400", - "401": "Error401", - "403": "Error403", - "404": "Error404", - "409": "Error409", - "429": "Error429", + "200": "LegalHoldResponse", + "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() @@ -4900,12 +5007,11 @@ def enterprise_add_project_member( response_types_map=_response_types_map, ).data - def _enterprise_add_project_member_serialize( + def _get_legal_hold_serialize( self, org_id, - team_id, - project_id, - add_project_member_request, + case_id, + legal_hold_id, _request_auth, _content_type, _headers, @@ -4926,34 +5032,24 @@ def _enterprise_add_project_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 project_id is not None: - _path_params["project_id"] = project_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 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 - # 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="/v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -4967,16 +5063,39 @@ def _enterprise_add_project_member_serialize( ) @validate_call - def enterprise_delete_project_member( + def get_legal_hold_content_items( 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.") + 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.", + ), ], - member_id: Annotated[ - StrictStr, Field(description="The ID of the member that you want to remove from a project.") + 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)], @@ -4986,19 +5105,21 @@ 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 + ) -> PaginatedLegalHoldContentItemsResponse: + """Get content items under legal hold - Remove a member from a project. The user remains in the team even after the member is removed from a project.

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.

+ 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 the organization to which the project belongs. (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 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 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 @@ -5021,11 +5142,12 @@ def enterprise_delete_project_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_delete_project_member_serialize( + _param = self._get_legal_hold_content_items_serialize( org_id=org_id, - team_id=team_id, - project_id=project_id, - member_id=member_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, @@ -5033,13 +5155,12 @@ def enterprise_delete_project_member( ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "400": "Error400", - "401": "Error401", - "403": "Error403", - "404": "Error404", - "409": "Error409", - "429": "Error429", + "200": "PaginatedLegalHoldContentItemsResponse", + "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() @@ -5048,12 +5169,13 @@ def enterprise_delete_project_member( response_types_map=_response_types_map, ).data - def _enterprise_delete_project_member_serialize( + def _get_legal_hold_content_items_serialize( self, org_id, - team_id, - project_id, - member_id, + case_id, + legal_hold_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -5074,16 +5196,3456 @@ def _enterprise_delete_project_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 project_id is not None: + 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="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, + 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_legal_hold_export_jobs( + 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." + ), + ], + 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)], + 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, + ) -> PaginatedCaseExportJobsResponse: + """Get board export jobs of a case (Beta) + + 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 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 _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_legal_hold_export_jobs_serialize( + org_id=org_id, + case_id=case_id, + limit=limit, + cursor=cursor, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "200": "PaginatedCaseExportJobsResponse", + "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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _get_legal_hold_export_jobs_serialize( + self, + org_id, + case_id, + limit, + 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 org_id is not None: + _path_params["org_id"] = org_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 + + # 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}/cases/{case_id}/export-jobs", + 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_mindmap_nodes_experimental( + self, + 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)], + 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, + ) -> MindmapItem: + """Create mind map node + + 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 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 + (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_mindmap_nodes_experimental_serialize( + board_id=board_id, + mindmap_create_request=mindmap_create_request, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "201": "MindmapItem", + "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( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _create_mindmap_nodes_experimental_serialize( + self, + board_id, + mindmap_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 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="POST", + resource_path="/v2-experimental/boards/{board_id}/mindmap_nodes", + 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_mindmap_node_experimental( + self, + 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)], + 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 mind map node + + Deletes a mind map node item and its child nodes 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) + :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 + (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_mindmap_node_experimental_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": "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( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _delete_mindmap_node_experimental_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-experimental/boards/{board_id}/mindmap_nodes/{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_mindmap_node_experimental( + self, + 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)], + 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, + ) -> MindmapItem: + """Get specific mind map node + + Retrieves information for a specific mind map node 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) + :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 + (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_mindmap_node_experimental_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": "MindmapItem", + } + 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_mindmap_node_experimental_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-experimental/boards/{board_id}/mindmap_nodes/{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_mindmap_nodes_experimental( + self, + 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)], + 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, + ) -> MindmapCursorPaged: + """Get mind map nodes + + 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 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 + (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_mindmap_nodes_experimental_serialize( + board_id=board_id, + limit=limit, + cursor=cursor, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "200": "MindmapCursorPaged", + } + 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_mindmap_nodes_experimental_serialize( + self, + board_id, + limit, + 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 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-experimental/boards/{board_id}/mindmap_nodes", + 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 revoke_token_v2( + self, + revoke_token_request: RevokeTokenRequest, + _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, + ) -> None: + """Revoke token (v2) + + 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 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 + (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._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, + "404": "ErrorResponse", + } + 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 _revoke_token_v2_serialize( + self, + revoke_token_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 + # 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="POST", + resource_path="/v2/oauth/revoke", + 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 enterprise_get_organization_member( + self, + 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)], + 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, + ) -> OrganizationMember: + """Get organization member + + 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 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 + (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._enterprise_get_organization_member_serialize( + org_id=org_id, + 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]] = { + "200": "OrganizationMember", + "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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _enterprise_get_organization_member_serialize( + self, + org_id, + member_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 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 + # 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}/members/{member_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 enterprise_get_organization_members( + 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, + _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, + ) -> EnterpriseGetOrganizationMembers200Response: + """Get organization members + + 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 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 + (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._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, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "200": "EnterpriseGetOrganizationMembers200Response", + "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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _enterprise_get_organization_members_serialize( + self, + org_id, + emails, + role, + license, + active, + cursor, + limit, + _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 org_id is not None: + _path_params["org_id"] = org_id + # 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"]) + + # authentication setting + _auth_settings: List[str] = [] + + return self.api_client.param_serialize( + method="GET", + resource_path="/v2/orgs/{org_id}/members", + 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 enterprise_get_organization( + self, + org_id: Annotated[StrictStr, Field(description="id of the organization")], + _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, + ) -> Organization: + """Get organization info + + 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 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 + (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._enterprise_get_organization_serialize( + org_id=org_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "200": "Organization", + "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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _enterprise_get_organization_serialize( + self, + org_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 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"]) + + # authentication setting + _auth_settings: List[str] = [] + + return self.api_client.param_serialize( + method="GET", + resource_path="/v2/orgs/{org_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 enterprise_add_project_member( + 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)], + 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, + ) -> ProjectMember: + """Add member in a project + + 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 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 + (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._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, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _enterprise_add_project_member_serialize( + self, + org_id, + team_id, + project_id, + add_project_member_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 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 + + # 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", + 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 enterprise_delete_project_member( + 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)], + 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, + ) -> None: + """Remove project member + + 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 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 + (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._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, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _enterprise_delete_project_member_serialize( + self, + org_id, + team_id, + project_id, + member_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 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"]) + + # 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}", + 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 enterprise_get_project_member( + 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.") + ], + _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, + ) -> ProjectMember: + """Get project member + + 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 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 _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._enterprise_get_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, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _enterprise_get_project_member_serialize( + self, + org_id, + team_id, + project_id, + member_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 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"]) + + # 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}", + 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 enterprise_get_project_members( + 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.") + ], + 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)], + 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, + ) -> ProjectMemberPage: + """List of project members + + 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 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 _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._enterprise_get_project_members_serialize( + org_id=org_id, + team_id=team_id, + project_id=project_id, + limit=limit, + cursor=cursor, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _enterprise_get_project_members_serialize( + self, + org_id, + team_id, + project_id, + limit, + 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 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 + 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="GET", + 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, + 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 enterprise_update_project_member( + self, + 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)], + 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, + ) -> ProjectMember: + """Update project member + + 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 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 _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._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, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _enterprise_update_project_member_serialize( + self, + org_id, + team_id, + project_id, + member_id, + update_project_member_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 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 + 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}", + 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 enterprise_get_project_settings( + 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.") + ], + _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, + ) -> ProjectSettings: + """Get project settings + + 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 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 _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._enterprise_get_project_settings_serialize( + org_id=org_id, + team_id=team_id, + project_id=project_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _enterprise_get_project_settings_serialize( + self, + org_id, + team_id, + project_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 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 + + # 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}/projects/{project_id}/settings", + 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 enterprise_update_project_settings( + 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, + _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, + ) -> ProjectSettings: + """Update project settings + + 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 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 _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._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, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _enterprise_update_project_settings_serialize( + self, + org_id, + team_id, + project_id, + update_project_settings_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 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 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="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, + 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 enterprise_create_project( + self, + 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)], + 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, + ) -> Project: + """Create project + + 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 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 _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._enterprise_create_project_serialize( + org_id=org_id, + team_id=team_id, + create_project_request=create_project_request, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _enterprise_create_project_serialize( + self, + org_id, + team_id, + create_project_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 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 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", + 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 enterprise_delete_project( + self, + 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)], + 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, + ) -> None: + """Delete project + + 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 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 _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._enterprise_delete_project_serialize( + org_id=org_id, + team_id=team_id, + project_id=project_id, + _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", + } + 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 _enterprise_delete_project_serialize( + self, + org_id, + team_id, + project_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 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 + + # 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}/projects/{project_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 enterprise_get_project( + 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.") + ], + _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, + ) -> Project: + """Get project + + 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 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 _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._enterprise_get_project_serialize( + org_id=org_id, + team_id=team_id, + project_id=project_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _enterprise_get_project_serialize( + self, + org_id, + team_id, + project_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 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 + + # 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}/projects/{project_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 enterprise_get_projects( + 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."), + ], + 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)], + 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, + ) -> ProjectPage: + """List of projects + + 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 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 _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._enterprise_get_projects_serialize( + org_id=org_id, + team_id=team_id, + limit=limit, + cursor=cursor, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _enterprise_get_projects_serialize( + self, + org_id, + team_id, + limit, + 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 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 + + # 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}/projects", + 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 enterprise_update_project( + 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, + _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, + ) -> Project: + """Update project + + 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) + :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 _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._enterprise_update_project_serialize( + org_id=org_id, + team_id=team_id, + project_id=project_id, + update_project_request=update_project_request, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _enterprise_update_project_serialize( + self, + org_id, + team_id, + project_id, + update_project_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 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 + 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}", + 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 enterprise_post_user_sessions_reset( + self, + 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)], + 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, + ) -> None: + """Reset all sessions of a user + + 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 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 + (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._enterprise_post_user_sessions_reset_serialize( + email=email, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "200": 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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _enterprise_post_user_sessions_reset_serialize( + self, + email, + _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 email is not None: + + _query_params.append(("email", email)) + + # 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="POST", + resource_path="/v2/sessions/reset_all", + 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 enterprise_boards_create_group( + self, + org_id: Annotated[StrictStr, Field(description="The id of the 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)], + 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, + ) -> BoardUserGroup: + """Create board user group assignments + + Shares a board with user groups with a specified role.

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.

+ + :param org_id: The id of the Organization. (required) + :type org_id: str + :param board_id: The ID of the board. (required) + :type board_id: 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 + (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._enterprise_boards_create_group_serialize( + org_id=org_id, + board_id=board_id, + create_board_user_groups_request=create_board_user_groups_request, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "200": "BoardUserGroup", + "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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _enterprise_boards_create_group_serialize( + self, + org_id, + board_id, + create_board_user_groups_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 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 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", + 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 enterprise_boards_delete_groups( + self, + org_id: Annotated[StrictStr, Field(description="The id of the 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)], + 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, + ) -> None: + """Delete board user group assignment + + 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.

+ + :param org_id: The id of the Organization. (required) + :type org_id: str + :param board_id: The ID of the board. (required) + :type board_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 + (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._enterprise_boards_delete_groups_serialize( + org_id=org_id, + board_id=board_id, + group_id=group_id, + _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, + } + 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 _enterprise_boards_delete_groups_serialize( + self, + org_id, + board_id, + group_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 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 + # 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="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, + 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 enterprise_boards_get_groups( + self, + org_id: Annotated[StrictStr, Field(description="The id of the 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)], + 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, + ) -> BoardUserGroupsPage: + """Get board user group assignments + + 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.

+ + :param org_id: The id of the Organization. (required) + :type org_id: str + :param board_id: The ID of the board. (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 _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._enterprise_boards_get_groups_serialize( + org_id=org_id, + board_id=board_id, + limit=limit, + cursor=cursor, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "200": "BoardUserGroupsPage", + "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() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + def _enterprise_boards_get_groups_serialize( + self, + org_id, + board_id, + limit, + 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 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 # set the HTTP header `Accept` _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) @@ -5092,8 +8654,8 @@ def _enterprise_delete_project_member_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}/members/{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, @@ -5107,17 +8669,11 @@ def _enterprise_delete_project_member_serialize( ) @validate_call - def enterprise_get_project_member( + def enterprise_delete_team_member( 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.") - ], + org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], + team_id: Annotated[StrictStr, Field(description="The id of the Team.")], + member_id: Annotated[StrictStr, Field(description="The id of the Team Member")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5127,18 +8683,16 @@ 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 + ) -> None: + """Delete team member from team - Retrieves information for a specific project member.

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 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 org_id: The ID of the organization to which the project belongs. (required) + :param org_id: The id of the Organization. (required) :type org_id: str - :param team_id: The ID of the team to which the project belongs. (required) + :param team_id: The id of the Team. (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) + :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 @@ -5162,10 +8716,9 @@ def enterprise_get_project_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_project_member_serialize( + _param = self._enterprise_delete_team_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, @@ -5174,13 +8727,13 @@ 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", + "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) response_data.read() @@ -5189,11 +8742,10 @@ def enterprise_get_project_member( response_types_map=_response_types_map, ).data - def _enterprise_get_project_member_serialize( + def _enterprise_delete_team_member_serialize( self, org_id, team_id, - project_id, member_id, _request_auth, _content_type, @@ -5217,8 +8769,6 @@ def _enterprise_get_project_member_serialize( _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 @@ -5226,15 +8776,12 @@ def _enterprise_get_project_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="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/members/{member_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, @@ -5248,25 +8795,11 @@ def _enterprise_get_project_member_serialize( ) @validate_call - def enterprise_get_project_members( + def enterprise_get_team_member( 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.") - ], - 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, + org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], + team_id: Annotated[StrictStr, Field(description="The id of the Team.")], + member_id: Annotated[StrictStr, Field(description="The id of the Team Member")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5276,21 +8809,17 @@ 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 + ) -> TeamMember: + """Get team member - Retrieves the list of members for a specific project.

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.

+ 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 org_id: The ID of the organization to which the project belongs. (required) + :param org_id: The id of the Organization. (required) :type org_id: str - :param team_id: The ID of the team to which the project belongs. (required) + :param team_id: The id of the Team. (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 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 @@ -5313,12 +8842,10 @@ def enterprise_get_project_members( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_project_members_serialize( + _param = self._enterprise_get_team_member_serialize( org_id=org_id, team_id=team_id, - project_id=project_id, - limit=limit, - cursor=cursor, + member_id=member_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5326,13 +8853,12 @@ 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", + "200": "TeamMember", + "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() @@ -5341,13 +8867,11 @@ def enterprise_get_project_members( response_types_map=_response_types_map, ).data - def _enterprise_get_project_members_serialize( + def _enterprise_get_team_member_serialize( self, org_id, team_id, - project_id, - limit, - cursor, + member_id, _request_auth, _content_type, _headers, @@ -5370,17 +8894,9 @@ def _enterprise_get_project_members_serialize( _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 - 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 @@ -5393,7 +8909,7 @@ def _enterprise_get_project_members_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/members", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/members/{member_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -5405,17 +8921,25 @@ def _enterprise_get_project_members_serialize( _host=_host, _request_auth=_request_auth, ) - - @validate_call - def enterprise_update_project_member( - self, - 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, + + @validate_call + def enterprise_get_team_members( + self, + org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], + team_id: Annotated[StrictStr, Field(description="The id of the 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)], @@ -5425,21 +8949,21 @@ 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 + ) -> TeamMembersPage: + """List team members - Updates details of a project member, such as the member's role.

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 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 org_id: The ID of the organization to which the project member belongs. (required) + :param org_id: The id of the Organization. (required) :type org_id: str - :param team_id: The ID of the team to which the project member belongs. (required) + :param team_id: The id of the Team. (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 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 @@ -5462,12 +8986,12 @@ def enterprise_update_project_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_update_project_member_serialize( + _param = self._enterprise_get_team_members_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, + limit=limit, + cursor=cursor, + role=role, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5475,13 +8999,12 @@ 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": "TeamMembersPage", + "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() @@ -5490,13 +9013,13 @@ def enterprise_update_project_member( response_types_map=_response_types_map, ).data - def _enterprise_update_project_member_serialize( + def _enterprise_get_team_members_serialize( self, org_id, team_id, - project_id, - member_id, - update_project_member_request, + limit, + cursor, + role, _request_auth, _content_type, _headers, @@ -5519,34 +9042,32 @@ def _enterprise_update_project_member_serialize( _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 + 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 - 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/orgs/{org_id}/teams/{team_id}/members", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -5560,13 +9081,11 @@ def _enterprise_update_project_member_serialize( ) @validate_call - def enterprise_get_project_settings( + def enterprise_invite_team_member( 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.") - ], + org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], + team_id: Annotated[StrictStr, Field(description="The id of the Team.")], + team_member_invite: TeamMemberInvite, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5576,17 +9095,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 + ) -> TeamMember: + """Invite team members - Retrieves the project settings.

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.

+ 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 org_id: The ID of the organization to which the project belongs. (required) + :param org_id: The id of the Organization. (required) :type org_id: str - :param team_id: The ID of the team to which the project belongs. (required) + :param team_id: The id of the Team. (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 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 @@ -5609,10 +9128,10 @@ def enterprise_get_project_settings( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_project_settings_serialize( + _param = self._enterprise_invite_team_member_serialize( org_id=org_id, team_id=team_id, - project_id=project_id, + team_member_invite=team_member_invite, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5620,12 +9139,13 @@ def enterprise_get_project_settings( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ProjectSettings", - "400": "Error400", - "401": "Error401", - "403": "Error403", - "404": "Error404", - "429": "Error429", + "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) response_data.read() @@ -5634,11 +9154,11 @@ def enterprise_get_project_settings( response_types_map=_response_types_map, ).data - def _enterprise_get_project_settings_serialize( + def _enterprise_invite_team_member_serialize( self, org_id, team_id, - project_id, + team_member_invite, _request_auth, _content_type, _headers, @@ -5661,22 +9181,30 @@ def _enterprise_get_project_settings_serialize( _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 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/orgs/{org_id}/teams/{team_id}/projects/{project_id}/settings", + method="POST", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/members", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -5690,12 +9218,12 @@ def _enterprise_get_project_settings_serialize( ) @validate_call - def enterprise_update_project_settings( + def enterprise_update_team_member( 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, + org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], + team_id: Annotated[StrictStr, Field(description="The id of the 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)], @@ -5705,19 +9233,19 @@ 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 + ) -> TeamMember: + """Update team member - Updates the settings of a project.

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.

+ 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 org_id: The ID of the organization to which the project belongs. (required) + :param org_id: The id of the Organization. (required) :type org_id: str - :param team_id: The ID of the team to which the project belongs. (required) + :param team_id: The id of the Team. (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 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 @@ -5740,11 +9268,11 @@ def enterprise_update_project_settings( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_update_project_settings_serialize( + _param = self._enterprise_update_team_member_serialize( org_id=org_id, team_id=team_id, - project_id=project_id, - update_project_settings_request=update_project_settings_request, + member_id=member_id, + team_member_changes=team_member_changes, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5752,13 +9280,13 @@ 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", + "200": "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) response_data.read() @@ -5767,12 +9295,12 @@ def enterprise_update_project_settings( response_types_map=_response_types_map, ).data - def _enterprise_update_project_settings_serialize( + def _enterprise_update_team_member_serialize( self, org_id, team_id, - project_id, - update_project_settings_request, + member_id, + team_member_changes, _request_auth, _content_type, _headers, @@ -5795,14 +9323,14 @@ def _enterprise_update_project_settings_serialize( _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 - if update_project_settings_request is not None: - _body_params = update_project_settings_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"]) @@ -5820,7 +9348,7 @@ def _enterprise_update_project_settings_serialize( return self.api_client.param_serialize( method="PATCH", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/projects/{project_id}/settings", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/members/{member_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -5834,15 +9362,9 @@ def _enterprise_update_project_settings_serialize( ) @validate_call - def enterprise_create_project( + def enterprise_get_default_team_settings( self, - 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, + org_id: Annotated[StrictStr, Field(description="The id of an Organization.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5852,17 +9374,13 @@ 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 + ) -> TeamSettings: + """Get default team settings - 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.

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 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 org_id: The ID of the organization within which you you want to create a project. (required) + :param org_id: The id of an Organization. (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 _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 @@ -5885,10 +9403,8 @@ def enterprise_create_project( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_create_project_serialize( + _param = self._enterprise_get_default_team_settings_serialize( org_id=org_id, - team_id=team_id, - create_project_request=create_project_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5896,13 +9412,12 @@ 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", + "200": "TeamSettings", + "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() @@ -5911,11 +9426,9 @@ def enterprise_create_project( response_types_map=_response_types_map, ).data - def _enterprise_create_project_serialize( + def _enterprise_get_default_team_settings_serialize( self, org_id, - team_id, - create_project_request, _request_auth, _content_type, _headers, @@ -5936,32 +9449,20 @@ def _enterprise_create_project_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 # 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="GET", + resource_path="/v2/orgs/{org_id}/default_teams_settings", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -5975,13 +9476,10 @@ def _enterprise_create_project_serialize( ) @validate_call - def enterprise_delete_project( + def enterprise_get_team_settings( self, - 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.")], + org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], + team_id: Annotated[StrictStr, Field(description="The id of the Team.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5991,17 +9489,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 + ) -> TeamSettings: + """Get team settings - Deletes a project. After a project is deleted, all boards and users that belong to the project remain in the team.

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 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 org_id: The ID of the organization from which you want to delete a project. (required) + :param org_id: The id of the Organization. (required) :type org_id: str - :param team_id: The ID of the team from which you want to delete a project. (required) + :param team_id: The id of the Team. (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 @@ -6024,10 +9520,9 @@ def enterprise_delete_project( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_delete_project_serialize( + _param = self._enterprise_get_team_settings_serialize( org_id=org_id, team_id=team_id, - project_id=project_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6035,13 +9530,12 @@ 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": "TeamSettings", + "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() @@ -6050,11 +9544,10 @@ def enterprise_delete_project( response_types_map=_response_types_map, ).data - def _enterprise_delete_project_serialize( + def _enterprise_get_team_settings_serialize( self, org_id, team_id, - project_id, _request_auth, _content_type, _headers, @@ -6077,8 +9570,6 @@ def _enterprise_delete_project_serialize( _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 @@ -6091,8 +9582,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/orgs/{org_id}/teams/{team_id}/settings", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -6106,18 +9597,11 @@ def _enterprise_delete_project_serialize( ) @validate_call - def enterprise_get_project( + def enterprise_update_team_settings( 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.") - ], + org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], + team_id: Annotated[StrictStr, Field(description="The id of the Team.")], + team_settings_changes: TeamSettingsChanges, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -6127,17 +9611,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 + ) -> TeamSettings: + """Update team settings - Retrieves project information, such as a name for an existing project.

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 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 org_id: The ID of the organization from which you want to retrieve the project information. (required) + :param org_id: The id of the Organization. (required) :type org_id: str - :param team_id: The ID of the team from which you want to retrieve the project information. (required) + :param team_id: The id of the Team. (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 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 @@ -6160,10 +9644,10 @@ def enterprise_get_project( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_project_serialize( + _param = self._enterprise_update_team_settings_serialize( org_id=org_id, team_id=team_id, - project_id=project_id, + team_settings_changes=team_settings_changes, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6171,12 +9655,13 @@ def enterprise_get_project( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Project", - "400": "Error400", - "401": "Error401", - "403": "Error403", - "404": "Error404", - "429": "Error429", + "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) response_data.read() @@ -6185,11 +9670,11 @@ def enterprise_get_project( response_types_map=_response_types_map, ).data - def _enterprise_get_project_serialize( + def _enterprise_update_team_settings_serialize( self, org_id, team_id, - project_id, + team_settings_changes, _request_auth, _content_type, _headers, @@ -6212,22 +9697,30 @@ def _enterprise_get_project_serialize( _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 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/orgs/{org_id}/teams/{team_id}/projects/{project_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, @@ -6241,30 +9734,11 @@ def _enterprise_get_project_serialize( ) @validate_call - def enterprise_get_projects( + def enterprise_teams_create_group( 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."), - ], - 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, + org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], + team_id: Annotated[StrictStr, Field(description="The id of the Team.")], + create_team_group_request: CreateTeamGroupRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -6274,19 +9748,17 @@ 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 + ) -> TeamGroup: + """Create user group to team connection - 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).

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 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.

' - :param org_id: The ID of the organization from which you want to retrieve the list of available projects. (required) + :param org_id: The id of the Organization. (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) + :param team_id: The id of the Team. (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 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 @@ -6309,11 +9781,10 @@ def enterprise_get_projects( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_projects_serialize( + _param = self._enterprise_teams_create_group_serialize( org_id=org_id, team_id=team_id, - limit=limit, - cursor=cursor, + create_team_group_request=create_team_group_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6321,12 +9792,12 @@ def enterprise_get_projects( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "ProjectPage", - "400": "Error400", - "401": "Error401", - "403": "Error403", - "404": "Error404", - "429": "Error429", + "201": "TeamGroup", + "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() @@ -6335,12 +9806,11 @@ def enterprise_get_projects( response_types_map=_response_types_map, ).data - def _enterprise_get_projects_serialize( + def _enterprise_teams_create_group_serialize( self, org_id, team_id, - limit, - cursor, + create_team_group_request, _request_auth, _content_type, _headers, @@ -6364,27 +9834,29 @@ def _enterprise_get_projects_serialize( 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/orgs/{org_id}/teams/{team_id}/projects", + method="POST", + resource_path="/v2/orgs/{org_id}/teams/{team_id}/groups", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -6398,12 +9870,11 @@ def _enterprise_get_projects_serialize( ) @validate_call - def enterprise_update_project( + def enterprise_teams_delete_group( 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, + org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], + team_id: Annotated[StrictStr, Field(description="The id of the Team.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -6413,19 +9884,17 @@ 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 + ) -> None: + """Delete user group to team connection - Update information about a project, such as the project name.

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.

+ 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.

- :param org_id: The ID of an Organization. (required) + :param org_id: The id of the Organization. (required) :type org_id: str - :param team_id: The ID of a Team. (required) + :param team_id: The id of the 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 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 @@ -6448,11 +9917,10 @@ def enterprise_update_project( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_update_project_serialize( + _param = self._enterprise_teams_delete_group_serialize( org_id=org_id, team_id=team_id, - project_id=project_id, - update_project_request=update_project_request, + group_id=group_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6460,13 +9928,13 @@ 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": 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) response_data.read() @@ -6475,12 +9943,11 @@ def enterprise_update_project( response_types_map=_response_types_map, ).data - def _enterprise_update_project_serialize( + def _enterprise_teams_delete_group_serialize( self, org_id, team_id, - project_id, - update_project_request, + group_id, _request_auth, _content_type, _headers, @@ -6503,32 +9970,19 @@ def _enterprise_update_project_serialize( _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 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 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 + # process the body parameter # 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/orgs/{org_id}/teams/{team_id}/groups/{group_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -6542,14 +9996,11 @@ def _enterprise_update_project_serialize( ) @validate_call - def enterprise_post_user_sessions_reset( + def enterprise_teams_get_group( self, - 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." - ), - ], + org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], + team_id: Annotated[StrictStr, Field(description="The id of the Team.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -6559,13 +10010,17 @@ 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 + ) -> TeamGroup: + """Get user group of a team - 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 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.

- :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 org_id: The id of the Organization. (required) + :type org_id: str + :param team_id: The id of the 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 @@ -6588,8 +10043,10 @@ 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._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, @@ -6597,7 +10054,7 @@ def enterprise_post_user_sessions_reset( ) _response_types_map: Dict[str, Optional[str]] = { - "200": None, + "200": "TeamGroup", "400": None, "401": None, "403": None, @@ -6611,9 +10068,11 @@ def enterprise_post_user_sessions_reset( response_types_map=_response_types_map, ).data - def _enterprise_post_user_sessions_reset_serialize( + def _enterprise_teams_get_group_serialize( self, - email, + org_id, + team_id, + group_id, _request_auth, _content_type, _headers, @@ -6632,21 +10091,26 @@ def _enterprise_post_user_sessions_reset_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 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 + # 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/orgs/{org_id}/teams/{team_id}/groups/{group_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -6660,11 +10124,20 @@ def _enterprise_post_user_sessions_reset_serialize( ) @validate_call - def enterprise_delete_team_member( + def enterprise_teams_get_groups( self, org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], team_id: Annotated[StrictStr, Field(description="The id of the Team.")], - member_id: Annotated[StrictStr, Field(description="The id of the Team Member")], + 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)], @@ -6674,17 +10147,19 @@ 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 + ) -> TeamGroupsPage: + """List of user group to team connections - 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.

+ 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.

:param org_id: The id of the Organization. (required) :type org_id: str :param team_id: The id of the Team. (required) :type team_id: str - :param member_id: The id of the Team Member (required) - :type 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 @@ -6707,10 +10182,11 @@ def enterprise_delete_team_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_delete_team_member_serialize( + _param = self._enterprise_teams_get_groups_serialize( org_id=org_id, team_id=team_id, - member_id=member_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6718,12 +10194,10 @@ def enterprise_delete_team_member( ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, + "200": "TeamGroupsPage", "400": None, "401": None, "403": None, - "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -6733,11 +10207,12 @@ def enterprise_delete_team_member( response_types_map=_response_types_map, ).data - def _enterprise_delete_team_member_serialize( + def _enterprise_teams_get_groups_serialize( self, org_id, team_id, - member_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -6760,19 +10235,28 @@ def _enterprise_delete_team_member_serialize( _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 + 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}/members/{member_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, @@ -6786,11 +10270,10 @@ def _enterprise_delete_team_member_serialize( ) @validate_call - def enterprise_get_team_member( + def enterprise_create_team( self, org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], - team_id: Annotated[StrictStr, Field(description="The id of the Team.")], - member_id: Annotated[StrictStr, Field(description="The id of the Team Member")], + create_team_request: CreateTeamRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -6800,17 +10283,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 + ) -> Team: + """Create team - 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.

+ 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 org_id: The id of the Organization. (required) :type org_id: str - :param team_id: The id of the Team. (required) - :type team_id: str - :param member_id: The id of the Team Member (required) - :type member_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 @@ -6833,10 +10314,9 @@ def enterprise_get_team_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_team_member_serialize( + _param = self._enterprise_create_team_serialize( org_id=org_id, - team_id=team_id, - member_id=member_id, + create_team_request=create_team_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6844,7 +10324,7 @@ def enterprise_get_team_member( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TeamMember", + "201": "Team", "400": None, "401": None, "403": None, @@ -6858,11 +10338,10 @@ def enterprise_get_team_member( response_types_map=_response_types_map, ).data - def _enterprise_get_team_member_serialize( + def _enterprise_create_team_serialize( self, org_id, - team_id, - member_id, + create_team_request, _request_auth, _content_type, _headers, @@ -6883,24 +10362,30 @@ 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 # 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="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/members/{member_id}", + method="POST", + resource_path="/v2/orgs/{org_id}/teams", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -6914,23 +10399,10 @@ def _enterprise_get_team_member_serialize( ) @validate_call - def enterprise_get_team_members( + def enterprise_delete_team( self, org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], team_id: Annotated[StrictStr, Field(description="The id of the 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": Team-guest user, user with access only to a team without access to organization. ' - ), - ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -6940,21 +10412,15 @@ 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: + """Delete team - 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.

+ 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 org_id: The id of the Organization. (required) :type org_id: str :param team_id: The id of the 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\": 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 @@ -6977,12 +10443,9 @@ def enterprise_get_team_members( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_team_members_serialize( + _param = self._enterprise_delete_team_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, @@ -6990,7 +10453,7 @@ def enterprise_get_team_members( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TeamMembersPage", + "204": None, "400": None, "401": None, "403": None, @@ -7004,13 +10467,10 @@ def enterprise_get_team_members( response_types_map=_response_types_map, ).data - def _enterprise_get_team_members_serialize( + def _enterprise_delete_team_serialize( self, org_id, team_id, - limit, - cursor, - role, _request_auth, _content_type, _headers, @@ -7034,31 +10494,16 @@ def _enterprise_get_team_members_serialize( 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 - # 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}/teams/{team_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -7072,11 +10517,10 @@ def _enterprise_get_team_members_serialize( ) @validate_call - def enterprise_invite_team_member( + def enterprise_get_team( self, org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], team_id: Annotated[StrictStr, Field(description="The id of the Team.")], - team_member_invite: TeamMemberInvite, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -7086,17 +10530,15 @@ 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 + ) -> Team: + """Get team - 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.

+ 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 org_id: The id of the Organization. (required) :type org_id: str :param team_id: The id of the 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 @@ -7119,10 +10561,9 @@ def enterprise_invite_team_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_invite_team_member_serialize( + _param = self._enterprise_get_team_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, @@ -7130,12 +10571,11 @@ def enterprise_invite_team_member( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "TeamMember", + "200": "Team", "400": None, "401": None, "403": None, "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -7145,11 +10585,10 @@ def enterprise_invite_team_member( response_types_map=_response_types_map, ).data - def _enterprise_invite_team_member_serialize( + def _enterprise_get_team_serialize( self, org_id, team_id, - team_member_invite, _request_auth, _content_type, _headers, @@ -7176,26 +10615,16 @@ def _enterprise_invite_team_member_serialize( # 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="POST", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/members", + method="GET", + resource_path="/v2/orgs/{org_id}/teams/{team_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -7209,12 +10638,22 @@ def _enterprise_invite_team_member_serialize( ) @validate_call - def enterprise_update_team_member( + def enterprise_get_teams( self, org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], - team_id: Annotated[StrictStr, Field(description="The id of the Team.")], - member_id: Annotated[StrictStr, Field(description="The id of the Team Member")], - team_member_changes: TeamMemberChanges, + 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)], @@ -7224,19 +10663,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 + ) -> TeamsPage: + """List teams - 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.

+ 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 the Organization. (required) :type org_id: str - :param team_id: The id of the 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 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 @@ -7259,11 +10698,11 @@ def enterprise_update_team_member( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_update_team_member_serialize( + _param = self._enterprise_get_teams_serialize( org_id=org_id, - team_id=team_id, - member_id=member_id, - team_member_changes=team_member_changes, + limit=limit, + cursor=cursor, + name=name, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -7271,12 +10710,11 @@ def enterprise_update_team_member( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TeamMember", + "200": "TeamsPage", "400": None, "401": None, "403": None, "404": None, - "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -7286,12 +10724,12 @@ def enterprise_update_team_member( response_types_map=_response_types_map, ).data - def _enterprise_update_team_member_serialize( + def _enterprise_get_teams_serialize( self, org_id, - team_id, - member_id, - team_member_changes, + limit, + cursor, + name, _request_auth, _content_type, _headers, @@ -7312,34 +10750,32 @@ 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 # 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 - 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"]) - # 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}/members/{member_id}", + method="GET", + resource_path="/v2/orgs/{org_id}/teams", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -7353,9 +10789,11 @@ def _enterprise_update_team_member_serialize( ) @validate_call - def enterprise_get_default_team_settings( + def enterprise_update_team( self, - org_id: Annotated[StrictStr, Field(description="The id of an Organization.")], + org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], + team_id: Annotated[StrictStr, Field(description="The id of the Team.")], + team_changes: TeamChanges, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -7365,13 +10803,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 + ) -> Team: + """Update team - 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.

+ 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 org_id: The id of an Organization. (required) + :param org_id: The id of the Organization. (required) :type org_id: str + :param team_id: The id of the 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 @@ -7394,8 +10836,10 @@ def enterprise_get_default_team_settings( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_default_team_settings_serialize( + _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, @@ -7403,7 +10847,7 @@ def enterprise_get_default_team_settings( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TeamSettings", + "200": "Team", "400": None, "401": None, "403": None, @@ -7417,9 +10861,11 @@ def enterprise_get_default_team_settings( response_types_map=_response_types_map, ).data - def _enterprise_get_default_team_settings_serialize( + def _enterprise_update_team_serialize( self, org_id, + team_id, + team_changes, _request_auth, _content_type, _headers, @@ -7440,20 +10886,32 @@ def _enterprise_get_default_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 # 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/orgs/{org_id}/default_teams_settings", + method="PATCH", + resource_path="/v2/orgs/{org_id}/teams/{team_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -7467,10 +10925,11 @@ def _enterprise_get_default_team_settings_serialize( ) @validate_call - def enterprise_get_team_settings( + def enterprise_create_group_member( self, org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], - team_id: Annotated[StrictStr, Field(description="The id of the Team.")], + 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)], @@ -7480,15 +10939,17 @@ 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 + ) -> GroupMember: + """Create user group member - 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.

+ 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.

:param org_id: The id of the Organization. (required) :type org_id: str - :param team_id: The id of the Team. (required) - :type team_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 @@ -7511,9 +10972,10 @@ def enterprise_get_team_settings( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_team_settings_serialize( + _param = self._enterprise_create_group_member_serialize( org_id=org_id, - team_id=team_id, + group_id=group_id, + create_group_member_request=create_group_member_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -7521,11 +10983,11 @@ def enterprise_get_team_settings( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TeamSettings", + "201": "GroupMember", "400": None, "401": None, "403": None, - "404": None, + "409": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -7535,10 +10997,11 @@ def enterprise_get_team_settings( response_types_map=_response_types_map, ).data - def _enterprise_get_team_settings_serialize( + def _enterprise_create_group_member_serialize( self, org_id, - team_id, + group_id, + create_group_member_request, _request_auth, _content_type, _headers, @@ -7559,22 +11022,32 @@ 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 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 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 + # authentication setting _auth_settings: List[str] = [] return self.api_client.param_serialize( - method="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}/settings", + method="POST", + resource_path="/v2/orgs/{org_id}/groups/{group_id}/members", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -7588,11 +11061,11 @@ def _enterprise_get_team_settings_serialize( ) @validate_call - def enterprise_update_team_settings( + def enterprise_delete_group_member( self, org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], - team_id: Annotated[StrictStr, Field(description="The id of the Team.")], - team_settings_changes: TeamSettingsChanges, + 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)], @@ -7602,17 +11075,17 @@ 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 + ) -> None: + """Delete user group member - 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.

+ 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.

:param org_id: The id of the Organization. (required) :type org_id: str - :param team_id: The id of the Team. (required) - :type team_id: str - :param team_settings_changes: (required) - :type team_settings_changes: TeamSettingsChanges + :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 @@ -7635,10 +11108,10 @@ def enterprise_update_team_settings( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_update_team_settings_serialize( + _param = self._enterprise_delete_group_member_serialize( org_id=org_id, - team_id=team_id, - team_settings_changes=team_settings_changes, + group_id=group_id, + member_id=member_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -7646,12 +11119,11 @@ def enterprise_update_team_settings( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TeamSettings", + "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) @@ -7661,11 +11133,11 @@ def enterprise_update_team_settings( response_types_map=_response_types_map, ).data - def _enterprise_update_team_settings_serialize( + def _enterprise_delete_group_member_serialize( self, org_id, - team_id, - team_settings_changes, + group_id, + member_id, _request_auth, _content_type, _headers, @@ -7686,32 +11158,21 @@ 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 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 # 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="DELETE", + resource_path="/v2/orgs/{org_id}/groups/{group_id}/members/{member_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -7725,10 +11186,11 @@ def _enterprise_update_team_settings_serialize( ) @validate_call - def enterprise_create_team( + def enterprise_get_group_member( self, org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], - create_team_request: CreateTeamRequest, + 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)], @@ -7738,15 +11200,17 @@ 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 + ) -> GroupMember: + """Get user group member - 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.

+ 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.

:param org_id: The id of the Organization. (required) :type org_id: str - :param create_team_request: (required) - :type create_team_request: CreateTeamRequest + :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 @@ -7769,9 +11233,10 @@ def enterprise_create_team( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_create_team_serialize( + _param = self._enterprise_get_group_member_serialize( org_id=org_id, - create_team_request=create_team_request, + group_id=group_id, + member_id=member_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -7779,7 +11244,7 @@ def enterprise_create_team( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "Team", + "200": "GroupMember", "400": None, "401": None, "403": None, @@ -7793,10 +11258,11 @@ def enterprise_create_team( response_types_map=_response_types_map, ).data - def _enterprise_create_team_serialize( + def _enterprise_get_group_member_serialize( self, org_id, - create_team_request, + group_id, + member_id, _request_auth, _content_type, _headers, @@ -7817,30 +11283,24 @@ def _enterprise_create_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 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_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="GET", + resource_path="/v2/orgs/{org_id}/groups/{group_id}/members/{member_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -7854,10 +11314,20 @@ def _enterprise_create_team_serialize( ) @validate_call - def enterprise_delete_team( + def enterprise_get_group_members( self, org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], - team_id: Annotated[StrictStr, Field(description="The id of the Team.")], + 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)], @@ -7867,15 +11337,19 @@ 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 + ) -> GroupMembersPage: + """List of user group members - 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 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.

:param org_id: The id of the Organization. (required) :type org_id: str - :param team_id: The id of the Team. (required) - :type team_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 @@ -7898,9 +11372,11 @@ def enterprise_delete_team( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_delete_team_serialize( + _param = self._enterprise_get_group_members_serialize( org_id=org_id, - team_id=team_id, + group_id=group_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -7908,11 +11384,10 @@ def enterprise_delete_team( ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, + "200": "GroupMembersPage", "400": None, "401": None, "403": None, - "404": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -7922,10 +11397,12 @@ def enterprise_delete_team( response_types_map=_response_types_map, ).data - def _enterprise_delete_team_serialize( + def _enterprise_get_group_members_serialize( self, org_id, - team_id, + group_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -7946,19 +11423,30 @@ def _enterprise_delete_team_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 # 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}", + method="GET", + resource_path="/v2/orgs/{org_id}/groups/{group_id}/members", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -7972,10 +11460,11 @@ def _enterprise_delete_team_serialize( ) @validate_call - def enterprise_get_team( + def enterprise_update_group_members( self, org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], - team_id: Annotated[StrictStr, Field(description="The id of the Team.")], + 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)], @@ -7984,16 +11473,18 @@ def enterprise_get_team( _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, - ) -> Team: - """Get team + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> List[UpdateUserGroupMembersResultInner]: + """Bulk edit of membership in user group - 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.

+ 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.

:param org_id: The id of the Organization. (required) :type org_id: str - :param team_id: The id of the Team. (required) - :type team_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 @@ -8016,9 +11507,10 @@ def enterprise_get_team( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_team_serialize( + _param = self._enterprise_update_group_members_serialize( org_id=org_id, - team_id=team_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, @@ -8026,11 +11518,13 @@ def enterprise_get_team( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Team", + "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) @@ -8040,10 +11534,11 @@ def enterprise_get_team( response_types_map=_response_types_map, ).data - def _enterprise_get_team_serialize( + def _enterprise_update_group_members_serialize( self, org_id, - team_id, + group_id, + update_user_group_members_request, _request_auth, _content_type, _headers, @@ -8064,22 +11559,32 @@ def _enterprise_get_team_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 # 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="GET", - resource_path="/v2/orgs/{org_id}/teams/{team_id}", + method="PATCH", + resource_path="/v2/orgs/{org_id}/groups/{group_id}/members", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -8093,22 +11598,11 @@ def _enterprise_get_team_serialize( ) @validate_call - def enterprise_get_teams( + def enterprise_groups_get_team( self, org_id: Annotated[StrictStr, Field(description="The id of the 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, + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], + team_id: Annotated[StrictStr, Field(description="The id of the Team.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -8118,19 +11612,17 @@ 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 + ) -> GroupTeam: + """Get user group team - 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.

+ 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.

:param org_id: The id of the 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 group_id: The ID of a user group. (required) + :type group_id: str + :param team_id: The 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 @@ -8153,11 +11645,10 @@ def enterprise_get_teams( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_get_teams_serialize( + _param = self._enterprise_groups_get_team_serialize( org_id=org_id, - limit=limit, - cursor=cursor, - name=name, + group_id=group_id, + team_id=team_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -8165,11 +11656,10 @@ def enterprise_get_teams( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "TeamsPage", + "200": "GroupTeam", "400": None, "401": None, "403": None, - "404": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -8179,12 +11669,11 @@ def enterprise_get_teams( response_types_map=_response_types_map, ).data - def _enterprise_get_teams_serialize( + def _enterprise_groups_get_team_serialize( self, org_id, - limit, - cursor, - name, + group_id, + team_id, _request_auth, _content_type, _headers, @@ -8205,19 +11694,11 @@ def _enterprise_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)) - - if name is not None: - - _query_params.append(("name", name)) - # process the header parameters # process the form parameters # process the body parameter @@ -8230,7 +11711,7 @@ def _enterprise_get_teams_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2/orgs/{org_id}/teams", + resource_path="/v2/orgs/{org_id}/groups/{group_id}/teams/{team_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -8244,11 +11725,20 @@ def _enterprise_get_teams_serialize( ) @validate_call - def enterprise_update_team( + def enterprise_groups_get_teams( self, org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], - team_id: Annotated[StrictStr, Field(description="The id of the Team.")], - team_changes: TeamChanges, + 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)], @@ -8258,17 +11748,19 @@ 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 + ) -> GroupTeamsPage: + """Get teams of a user group - 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.

+ 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.

:param org_id: The id of the Organization. (required) :type org_id: str - :param team_id: The id of the Team. (required) - :type team_id: str - :param team_changes: (required) - :type team_changes: TeamChanges + :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 _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 @@ -8291,10 +11783,11 @@ def enterprise_update_team( :return: Returns the result object. """ # noqa: E501 - _param = self._enterprise_update_team_serialize( + _param = self._enterprise_groups_get_teams_serialize( org_id=org_id, - team_id=team_id, - team_changes=team_changes, + group_id=group_id, + limit=limit, + cursor=cursor, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -8302,11 +11795,10 @@ def enterprise_update_team( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Team", + "200": "GroupTeamsPage", "400": None, "401": None, "403": None, - "404": None, "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -8316,11 +11808,12 @@ def enterprise_update_team( response_types_map=_response_types_map, ).data - def _enterprise_update_team_serialize( + def _enterprise_groups_get_teams_serialize( self, org_id, - team_id, - team_changes, + group_id, + limit, + cursor, _request_auth, _content_type, _headers, @@ -8341,32 +11834,30 @@ def _enterprise_update_team_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 # 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 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="/v2/orgs/{org_id}/groups/{group_id}/teams", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -8380,9 +11871,10 @@ def _enterprise_update_team_serialize( ) @validate_call - def create_board_subscription( + def enterprise_create_group( self, - create_board_subscription_request: CreateBoardSubscriptionRequest, + org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], + create_group_request: CreateGroupRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -8392,13 +11884,15 @@ def create_board_subscription( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardSubscription: - """Create webhook subscription + ) -> Group: + """Create user group - Creates a webhook subscription to receive notifications when an item on a board is updated. Subscriptions are created per user, per board. You can create multiple subscriptions. We currently support all board items except tags, connectors, and comments.

Required scope

boards:read

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.

- :param create_board_subscription_request: (required) - :type create_board_subscription_request: CreateBoardSubscriptionRequest + :param org_id: The id of the 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 @@ -8421,8 +11915,9 @@ def create_board_subscription( :return: Returns the result object. """ # noqa: E501 - _param = self._create_board_subscription_serialize( - create_board_subscription_request=create_board_subscription_request, + _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, @@ -8430,10 +11925,12 @@ def create_board_subscription( ) _response_types_map: Dict[str, Optional[str]] = { - "201": "BoardSubscription", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "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() @@ -8442,9 +11939,10 @@ def create_board_subscription( response_types_map=_response_types_map, ).data - def _create_board_subscription_serialize( + def _enterprise_create_group_serialize( self, - create_board_subscription_request, + org_id, + create_group_request, _request_auth, _content_type, _headers, @@ -8463,12 +11961,14 @@ def _create_board_subscription_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 - if create_board_subscription_request is not None: - _body_params = create_board_subscription_request + 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"]) @@ -8486,7 +11986,7 @@ def _create_board_subscription_serialize( return self.api_client.param_serialize( method="POST", - resource_path="/v2-experimental/webhooks/board_subscriptions", + resource_path="/v2/orgs/{org_id}/groups", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -8500,11 +12000,10 @@ def _create_board_subscription_serialize( ) @validate_call - def delete_subscription_by_id( + def enterprise_delete_group( self, - subscription_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the subscription that you want to delete") - ], + org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -8514,13 +12013,15 @@ def delete_subscription_by_id( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> object: - """Delete webhook subscription + ) -> None: + """Delete user group - Deletes the specified webhook subscription.

Required scope

boards:read

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.

- :param subscription_id: Unique identifier (ID) of the subscription that you want to delete (required) - :type subscription_id: str + :param org_id: The id of the 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 @@ -8543,8 +12044,9 @@ def delete_subscription_by_id( :return: Returns the result object. """ # noqa: E501 - _param = self._delete_subscription_by_id_serialize( - subscription_id=subscription_id, + _param = self._enterprise_delete_group_serialize( + org_id=org_id, + group_id=group_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -8552,10 +12054,12 @@ def delete_subscription_by_id( ) _response_types_map: Dict[str, Optional[str]] = { - "204": "object", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "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() @@ -8564,9 +12068,10 @@ def delete_subscription_by_id( response_types_map=_response_types_map, ).data - def _delete_subscription_by_id_serialize( + def _enterprise_delete_group_serialize( self, - subscription_id, + org_id, + group_id, _request_auth, _content_type, _headers, @@ -8585,22 +12090,21 @@ def _delete_subscription_by_id_serialize( _body_params: Optional[bytes] = None # process the path parameters - if subscription_id is not None: - _path_params["subscription_id"] = subscription_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 - # 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-experimental/webhooks/subscriptions/{subscription_id}", + resource_path="/v2/orgs/{org_id}/groups/{group_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -8614,11 +12118,10 @@ def _delete_subscription_by_id_serialize( ) @validate_call - def get_subscription_by_id( + def enterprise_get_group( self, - subscription_id: Annotated[ - StrictStr, Field(description="Unique identifier (ID) of the subscription that you want to retrieve") - ], + org_id: Annotated[StrictStr, Field(description="The id of the Organization.")], + group_id: Annotated[StrictStr, Field(description="The ID of a user group.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -8628,13 +12131,15 @@ def get_subscription_by_id( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GenericSubscription: - """Get specific webhook subscription + ) -> Group: + """Get user group - Retrieves information for a specific webhook subscription.

Required scope

boards:read

Rate limiting

Level 2
+ 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.

- :param subscription_id: Unique identifier (ID) of the subscription that you want to retrieve (required) - :type subscription_id: str + :param org_id: The id of the 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 @@ -8657,8 +12162,9 @@ def get_subscription_by_id( :return: Returns the result object. """ # noqa: E501 - _param = self._get_subscription_by_id_serialize( - subscription_id=subscription_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, @@ -8666,10 +12172,12 @@ def get_subscription_by_id( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GenericSubscription", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "200": "Group", + "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() @@ -8678,9 +12186,10 @@ def get_subscription_by_id( response_types_map=_response_types_map, ).data - def _get_subscription_by_id_serialize( + def _enterprise_get_group_serialize( self, - subscription_id, + org_id, + group_id, _request_auth, _content_type, _headers, @@ -8699,8 +12208,10 @@ def _get_subscription_by_id_serialize( _body_params: Optional[bytes] = None # process the path parameters - if subscription_id is not None: - _path_params["subscription_id"] = subscription_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 @@ -8714,7 +12225,7 @@ def _get_subscription_by_id_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2-experimental/webhooks/subscriptions/{subscription_id}", + resource_path="/v2/orgs/{org_id}/groups/{group_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -8728,10 +12239,19 @@ def _get_subscription_by_id_serialize( ) @validate_call - def get_user_subscriptions( + def enterprise_get_groups( self, - limit: Optional[Annotated[str, Field(strict=True)]] = None, - cursor: Optional[StrictStr] = None, + org_id: Annotated[StrictStr, Field(description="The id of the 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)], @@ -8741,14 +12261,16 @@ def get_user_subscriptions( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GenericSubscriptionsCursorPaged: - """Get webhook subscriptions + ) -> GroupsPage: + """List of user groups - Retrieves information about all webhook subscriptions for a specific user.

Required scope

boards:read

Rate limiting

Level 4
+ 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.

- :param limit: - :type limit: str - :param cursor: + :param org_id: The id of the 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 @@ -8772,7 +12294,8 @@ def get_user_subscriptions( :return: Returns the result object. """ # noqa: E501 - _param = self._get_user_subscriptions_serialize( + _param = self._enterprise_get_groups_serialize( + org_id=org_id, limit=limit, cursor=cursor, _request_auth=_request_auth, @@ -8782,10 +12305,11 @@ def get_user_subscriptions( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "GenericSubscriptionsCursorPaged", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "200": "GroupsPage", + "400": None, + "401": None, + "403": None, + "429": None, } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -8794,8 +12318,9 @@ def get_user_subscriptions( response_types_map=_response_types_map, ).data - def _get_user_subscriptions_serialize( + def _enterprise_get_groups_serialize( self, + org_id, limit, cursor, _request_auth, @@ -8816,6 +12341,8 @@ def _get_user_subscriptions_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: @@ -8837,7 +12364,7 @@ def _get_user_subscriptions_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/v2-experimental/webhooks/subscriptions", + resource_path="/v2/orgs/{org_id}/groups", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -8851,10 +12378,11 @@ def _get_user_subscriptions_serialize( ) @validate_call - def update_board_subscription( + def enterprise_update_group( self, - subscription_id: StrictStr, - update_board_subscription_request: UpdateBoardSubscriptionRequest, + org_id: Annotated[StrictStr, Field(description="The id of the 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)], @@ -8864,15 +12392,17 @@ def update_board_subscription( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> BoardSubscription: - """Update webhook subscription + ) -> Group: + """Update user group - Updates the status or the callback URL of an existing webhook subscription.

Required scope

boards:read

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.

- :param subscription_id: (required) - :type subscription_id: str - :param update_board_subscription_request: (required) - :type update_board_subscription_request: UpdateBoardSubscriptionRequest + :param org_id: The id of the 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 @@ -8895,9 +12425,10 @@ def update_board_subscription( :return: Returns the result object. """ # noqa: E501 - _param = self._update_board_subscription_serialize( - subscription_id=subscription_id, - update_board_subscription_request=update_board_subscription_request, + _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, @@ -8905,10 +12436,13 @@ def update_board_subscription( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BoardSubscription", - "400": "CreateFrameItem400Response", - "404": "CreateFrameItem400Response", - "429": "CreateFrameItem400Response", + "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() @@ -8917,10 +12451,11 @@ def update_board_subscription( response_types_map=_response_types_map, ).data - def _update_board_subscription_serialize( + def _enterprise_update_group_serialize( self, - subscription_id, - update_board_subscription_request, + org_id, + group_id, + update_group_request, _request_auth, _content_type, _headers, @@ -8939,14 +12474,16 @@ def _update_board_subscription_serialize( _body_params: Optional[bytes] = None # process the path parameters - if subscription_id is not None: - _path_params["subscription_id"] = subscription_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 update_board_subscription_request is not None: - _body_params = update_board_subscription_request + 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"]) @@ -8964,7 +12501,7 @@ def _update_board_subscription_serialize( return self.api_client.param_serialize( method="PATCH", - resource_path="/v2-experimental/webhooks/board_subscriptions/{subscription_id}", + resource_path="/v2/orgs/{org_id}/groups/{group_id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -8996,7 +12533,7 @@ def create_app_card_item( ) -> AppCardItem: """Create app card item - Adds an app card item to a board.

Required scope

boards:write

Rate limiting

Level 2
+ Adds an app card 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 @@ -9125,7 +12662,7 @@ def delete_app_card_item( ) -> object: """Delete app card item - Deletes an app card item from a board.

Required scope

boards:write

Rate limiting

Level 3
+ Deletes an app card 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 an item. (required) :type board_id: str @@ -9249,7 +12786,7 @@ def get_app_card_item( ) -> AppCardItem: """Get app card 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 app card 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 @@ -9371,7 +12908,7 @@ def update_app_card_item( ) -> AppCardItem: """Update app card 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 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 board_id: Unique identifier (ID) of the board where you want to update the item. (required) :type board_id: str @@ -9508,7 +13045,7 @@ def get_board_members( ) -> BoardMembersPagedResponse: """Get all board members - Retrieves a pageable list of members for a board.

Required scope

boards:read

Rate limiting

Level 1
+ 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 @@ -9641,7 +13178,7 @@ def get_specific_board_member( ) -> BoardMemberWithLinks: """Get specific board member - Retrieves information for a board member.

Required scope

boards:read

Rate limiting

Level 1
+ 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 @@ -9764,7 +13301,7 @@ def remove_board_member( ) -> object: """Remove board member - Removes a board member from 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 from which you want to delete an item. (required) :type board_id: str @@ -9885,7 +13422,7 @@ def share_board( ) -> InvitationResult: """Share board - 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 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 to which the board member belongs. (required) :type board_id: str @@ -10020,7 +13557,7 @@ def update_board_member( ) -> BoardMemberWithLinks: """Update board member - Updates the role of a board member.

Required scope

boards:write

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 update the role of the board member. (required) :type board_id: str @@ -10155,7 +13692,7 @@ def copy_board( ) -> BoardWithLinksAndWithoutProject: """Copy board - 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
+ 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 copy_from: Unique identifier (ID) of the board that you want to copy. (required) :type copy_from: str @@ -10284,7 +13821,7 @@ def create_board( ) -> BoardWithLinks: """Create board - 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
+ 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_changes: :type board_changes: BoardChanges @@ -10407,7 +13944,7 @@ def delete_board( ) -> object: """Delete board - 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 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 that you want to delete. (required) :type board_id: str @@ -10526,7 +14063,7 @@ def get_boards( ) -> BoardsPagedResponse: """Get boards - 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. 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 team_id: :type team_id: str @@ -10690,7 +14227,7 @@ def get_specific_board( ) -> BoardWithLinksAndLastOpened: """Get specific board - Retrieves information about a board.

Required scope

boards:read

Rate limiting

Level 1
+ Retrieves information about a board.

Required scope

boards:read

Rate limiting

Level 1
:param board_id: Unique identifier (ID) of the board that you want to retrieve. (required) :type board_id: str @@ -10805,7 +14342,7 @@ def update_board( ) -> BoardWithLinks: """Update board - Updates a specific board.

Required scope

boards:write

Rate limiting

Level 2
+ Updates a specific board.

Required scope

boards:write

Rate limiting

Level 2
:param board_id: Unique identifier (ID) of the board that you want to update. (required) :type board_id: str @@ -10936,7 +14473,7 @@ def create_card_item( ) -> CardItem: """Create card item - Adds a card item to a board

Required scope

boards:write

Rate limiting

Level 2
+ Adds a card 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 @@ -11065,7 +14602,7 @@ def delete_card_item( ) -> object: """Delete card item - Deletes a card item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ Deletes a card 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 @@ -11189,7 +14726,7 @@ def get_card_item( ) -> CardItem: """Get card item - Retrieves information for a specific card item on a board

Required scope

boards:read

Rate limiting

Level 1
+ Retrieves information for a specific card 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 @@ -11311,7 +14848,7 @@ def update_card_item( ) -> CardItem: """Update card item - 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 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 board_id: Unique identifier (ID) of the board where you want to update the item. (required) :type board_id: str @@ -11448,7 +14985,7 @@ def create_connector( ) -> ConnectorWithLinks: """Create connector - Adds a connector to a board.

Required scope

boards:write

Rate limiting

Level 2
+ Adds a connector to a board.

Required scope

boards:write

Rate limiting

Level 2
:param board_id: Unique identifier (ID) of the board for which you want to create the connector. (required) :type board_id: str @@ -11580,7 +15117,7 @@ def delete_connector( ) -> object: """Delete connector - Deletes the specified connector 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 connector. (required) :type board_id: str @@ -11706,7 +15243,7 @@ def get_connector( ) -> ConnectorWithLinks: """Get specific connector - Retrieves information for a specific connector 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 specific connector. (required) :type board_id: str @@ -11831,7 +15368,7 @@ def get_connectors( ) -> ConnectorsCursorPaged: """Get connectors - 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
+ 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 a list of connectors. (required) :type board_id: str @@ -11966,7 +15503,7 @@ def update_connector( ) -> ConnectorWithLinks: """Update connector - 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
+ 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 board_id: Unique identifier (ID) of the board for which you want to update the connector. (required) :type board_id: str @@ -12105,7 +15642,7 @@ def create_document_item_using_file_from_device( ) -> DocumentItem: """Create document item using file from device - Adds a document item to a board by selecting file from device.

Required scope

boards:write

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_platform_file_upload: Unique identifier (ID) of the board where you want to create the item. (required) :type board_id_platform_file_upload: str @@ -12237,7 +15774,7 @@ def create_document_item_using_url( ) -> DocumentItem: """Create document item using URL - Adds a document item to a board by specifying the URL where the document is hosted.

Required scope

boards:write

Rate limiting

Level 2
+ 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 board_id: Unique identifier (ID) of the board where you want to create the item. (required) :type board_id: str @@ -12366,7 +15903,7 @@ def delete_document_item( ) -> object: """Delete document item - Deletes a document item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ Deletes a document 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 @@ -12490,7 +16027,7 @@ def get_document_item( ) -> DocumentItem: """Get document item - Retrieves information for a specific document item on a board

Required scope

boards:read

Rate limiting

Level 1
+ Retrieves information for a specific document 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 @@ -12615,7 +16152,7 @@ def update_document_item_using_file_from_device( ) -> DocumentItem: """Update document item using file from device - Updates a document item on a board by using file from a device.

Required scope

boards:write

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_file_upload: Unique identifier (ID) of the board where you want to update the item. (required) :type board_id_platform_file_upload: str @@ -12754,7 +16291,7 @@ def update_document_item_using_url( ) -> DocumentItem: """Update document item using URL - Updates a document item on a board

Required scope

boards:write

Rate limiting

Level 2
+ Updates a document 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 @@ -12890,7 +16427,7 @@ def create_embed_item( ) -> EmbedItem: """Create embed item - Adds an embed item containing external content to a board.

Required scope

boards:write

Rate limiting

Level 2
+ Adds an embed item containing external content 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 @@ -13019,7 +16556,7 @@ def delete_embed_item( ) -> object: """Delete embed item - Deletes an embed item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ Deletes an embed 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 @@ -13143,7 +16680,7 @@ def get_embed_item( ) -> EmbedItem: """Get embed item - Retrieves information for a specific embed item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ Retrieves information for a specific embed 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 @@ -13265,7 +16802,7 @@ def update_embed_item( ) -> EmbedItem: """Update embed item - 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
+ 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 board_id: Unique identifier (ID) of the board where you want to update the item. (required) :type board_id: str @@ -13401,7 +16938,7 @@ def create_frame_item( ) -> FrameItem: """Create frame - Adds a frame to a board.

Required scope

boards:write

Rate limiting

Level 2
+ Adds a frame 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 a frame. (required) :type board_id: str @@ -13532,7 +17069,7 @@ def delete_frame_item( ) -> object: """Delete frame - Deletes a frame from a board.

Required scope

boards:write

Rate limiting

Level 3
+ Deletes a frame 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 frame. (required) :type board_id: str @@ -13656,7 +17193,7 @@ def get_frame_item( ) -> FrameItem: """Get frame - Retrieves information for a specific frame on a board.

Required scope

boards:read

Rate limiting

Level 1
+ 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 that contains the frame that you want to retrieve (required) :type board_id: str @@ -13780,7 +17317,7 @@ def update_frame_item( ) -> FrameItem: """Update frame - 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 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 where you want to update the frame. (required) :type board_id: str @@ -13914,7 +17451,7 @@ def create_group( ) -> GroupResponseShort: """Create group - 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
+ 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: (required) :type board_id: str @@ -14047,7 +17584,7 @@ def delete_group( ) -> object: """Deletes the group - Deletes a group from a board. All the items in the groups are deleted along with the group.

Required scope

boards:write

Rate limiting

Level 3
+ 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. (required) :type board_id: str @@ -14178,7 +17715,7 @@ def get_all_groups( ) -> GetAllGroups200Response: """Get all groups on a board - 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
+ 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. (required) :type board_id: str @@ -14307,7 +17844,7 @@ def get_group_by_id( ) -> GroupResponseShort: """Get a group by its ID - Returns a list of items in a specific group.

Required scope

boards:read

Rate limiting

Level 2 per item ID + 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. (required) :type board_id: str @@ -14431,7 +17968,7 @@ def get_items_by_group_id( ) -> GetItemsByGroupId200Response: """Get items of a group by ID - 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
+ 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. (required) :type board_id: str @@ -14571,7 +18108,7 @@ def un_group( ) -> object: """Ungroup items - Ungroups items from a group.

Required scope

boards:write

Rate limiting

Level 3
+ Ungroups items from a group.

Required scope

boards:write

Rate limiting

Level 3
:param board_id: Unique identifier (ID) of the board. (required) :type board_id: str @@ -14699,7 +18236,7 @@ def update_group( ) -> GroupResponseShort: """Updates a group with new items - 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
+ 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: Unique identifier (ID) of the board. (required) :type board_id: str @@ -14837,7 +18374,7 @@ def create_image_item_using_local_file( ) -> ImageItem: """Create image item using file from device - Adds an image item to a board by specifying a file from device.

Required scope

boards:write

Rate limiting

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

Required scope

boards:write

Rate limiting

Level 2
: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 @@ -14969,7 +18506,7 @@ def create_image_item_using_url( ) -> 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
+ 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 @@ -15098,7 +18635,7 @@ def delete_image_item( ) -> object: """Delete image item - Deletes an image item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ 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 @@ -15222,7 +18759,7 @@ def get_image_item( ) -> ImageItem: """Get image item - Retrieves information for a specific image item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ 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 @@ -15347,7 +18884,7 @@ def update_image_item_using_file_from_device( ) -> ImageItem: """Update image item using file from device - Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
+ Updates an image item on 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 @@ -15486,7 +19023,7 @@ def update_image_item_using_url( ) -> ImageItem: """Update image item using URL - Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
+ 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 @@ -15622,7 +19159,7 @@ def delete_item( ) -> object: """Delete item - Deletes an item from a board.

Required scope

boards:write

Rate limiting

Level 3
+ 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 @@ -15743,7 +19280,7 @@ def delete_item_experimental( ) -> object: """Delete item - Deletes an item from a board.

Required scope

boards:write

Rate limiting

Level 3
+ 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 @@ -15869,7 +19406,7 @@ def get_items( ) -> 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
+ 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 @@ -16019,7 +19556,7 @@ def get_items_within_frame( ) -> GenericItemCursorPaged: """Get items within frame - 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
+ 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_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 @@ -16169,7 +19706,7 @@ def get_specific_item( ) -> GenericItem: """Get specific item on board - Retrieves information for a specific item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ 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 @@ -16291,7 +19828,7 @@ def update_item_position_or_parent( ) -> 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
+ 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 @@ -16426,7 +19963,7 @@ def create_shape_item( ) -> ShapeItem: """Create shape item - Adds a shape 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 @@ -16555,7 +20092,7 @@ def delete_shape_item( ) -> object: """Delete shape item - Deletes a shape item from the 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 the item. (required) :type board_id: str @@ -16679,7 +20216,7 @@ def get_shape_item( ) -> ShapeItem: """Get shape item - Retrieves information for a specific shape 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 @@ -16801,7 +20338,7 @@ def update_shape_item( ) -> ShapeItem: """Update shape item - 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
+ 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 @@ -16937,7 +20474,7 @@ def create_sticky_note_item( ) -> StickyNoteItem: """Create sticky note item - Adds a sticky note item to a board.

Required scope

boards:write

Rate limiting

Level 2
+ Adds a sticky note 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 @@ -17066,7 +20603,7 @@ def delete_sticky_note_item( ) -> object: """Delete sticky note item - Deletes a sticky note item from the board.

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 from which you want to delete the item. (required) :type board_id: str @@ -17190,7 +20727,7 @@ def get_sticky_note_item( ) -> StickyNoteItem: """Get sticky note item - Retrieves information for a specific sticky note item on a board.

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 board_id: Unique identifier (ID) of the board from which you want to retrieve a specific item. (required) :type board_id: str @@ -17312,7 +20849,7 @@ def update_sticky_note_item( ) -> StickyNoteItem: """Update sticky note item - 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
+ 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 where you want to update the item. (required) :type board_id: str @@ -17454,7 +20991,7 @@ def attach_tag_to_item( ) -> object: """Attach tag to item - 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
+ 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_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 @@ -17583,7 +21120,7 @@ def create_tag( ) -> TagWithLinks: """Create tag - Creates a tag on a board.

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: Unique identifier (ID) of the board where you want to create the tag. (required) :type board_id: str @@ -17712,7 +21249,7 @@ def delete_tag( ) -> object: """Delete tag - 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
+ 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 delete a specific tag. (required) :type board_id: str @@ -17836,7 +21373,7 @@ def get_items_by_tag( ) -> ItemPagedResponse: """Get items by tag - Retrieves all the items that have the specified tag.

Required scope

boards:read

Rate limiting

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

Required scope

boards:read

Rate limiting

Level 1
: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 @@ -17976,7 +21513,7 @@ def get_tag( ) -> TagWithLinks: """Get tag - Retrieves information for a specific tag.

Required scope

boards:write

Rate limiting

Level 1
+ Retrieves information for a specific tag.

Required scope

boards:write

Rate limiting

Level 1
:param board_id: Unique identifier (ID) of the board where you want to retrieve a specific tag. (required) :type board_id: str @@ -18098,7 +21635,7 @@ def get_tags_from_board( ) -> TagsPagedResponse: """Get tags from board - Retrieves all the tags from the specified 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 whose tags you want to retrieve. (required) :type board_id: str @@ -18232,7 +21769,7 @@ def get_tags_from_item( ) -> GetTagsResponse: """Get tags from item - Retrieves all the tags from the specified item.

Required scope

boards:read

Rate limiting

Level 1
+ 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 with the item whose tags you want to retrieve. (required) :type board_id: str @@ -18359,7 +21896,7 @@ def remove_tag_from_item( ) -> object: """Remove tag from item - 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
+ 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 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 @@ -18489,7 +22026,7 @@ def update_tag( ) -> TagWithLinks: """Update 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
+ 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 @@ -18624,7 +22161,7 @@ def create_text_item( ) -> TextItem: """Create text item - Adds a text item to a board.

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: Unique identifier (ID) of the board where you want to create the item. (required) :type board_id: str @@ -18753,7 +22290,7 @@ def delete_text_item( ) -> object: """Delete text item - Deletes a text item from the board

Required scope

boards:write

Rate limiting

Level 3
+ Deletes a text 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 @@ -18877,7 +22414,7 @@ def get_text_item( ) -> TextItem: """Get text item - Retrieves information for a specific text item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ 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 from which you want to retrieve a specific item. (required) :type board_id: str @@ -18999,7 +22536,7 @@ def update_text_item( ) -> TextItem: """Update text 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
+ 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 where you want to update the item. (required) :type board_id: str diff --git a/packages/miro-api-python/miro_api/api_client.py b/packages/miro-api-python/miro_api/api_client.py index a743bab4f..49138d631 100644 --- a/packages/miro-api-python/miro_api/api_client.py +++ b/packages/miro-api-python/miro_api/api_client.py @@ -82,7 +82,7 @@ def __init__(self, configuration=None, header_name=None, header_value=None, cook self.default_headers[header_name] = header_value self.cookie = cookie # Set default User-Agent. - self.user_agent = "OpenAPI-Generator/2.2.3/python" + self.user_agent = "OpenAPI-Generator/2.2.4/python" self.client_side_validation = configuration.client_side_validation def __enter__(self): diff --git a/packages/miro-api-python/miro_api/configuration.py b/packages/miro-api-python/miro_api/configuration.py index f70bbae04..ad4b5216d 100644 --- a/packages/miro-api-python/miro_api/configuration.py +++ b/packages/miro-api-python/miro_api/configuration.py @@ -390,7 +390,7 @@ def to_debug_report(self): "OS: {env}\n" "Python Version: {pyversion}\n" "Version of the API: v2.0\n" - "SDK Package Version: 2.2.3".format(env=sys.platform, pyversion=sys.version) + "SDK Package Version: 2.2.4".format(env=sys.platform, pyversion=sys.version) ) def get_host_settings(self): diff --git a/packages/miro-api-python/miro_api/models/__init__.py b/packages/miro-api-python/miro_api/models/__init__.py index 7f87de9d2..d000e7177 100644 --- a/packages/miro-api-python/miro_api/models/__init__.py +++ b/packages/miro-api-python/miro_api/models/__init__.py @@ -33,17 +33,23 @@ from miro_api.models.audit_page import AuditPage from miro_api.models.audit_team import AuditTeam from miro_api.models.basic_error import BasicError -from miro_api.models.basic_error_enterprise_user_session_reset_enterprise_plan import ( - BasicErrorEnterpriseUserSessionResetEnterprisePlan, -) from miro_api.models.basic_error_organizations_enterprise_plan import BasicErrorOrganizationsEnterprisePlan from miro_api.models.board import Board from miro_api.models.board_changes import BoardChanges from miro_api.models.board_data_classification_label import BoardDataClassificationLabel +from miro_api.models.board_export_job import BoardExportJob +from miro_api.models.board_export_job_creator import BoardExportJobCreator from miro_api.models.board_export_job_id import BoardExportJobId from miro_api.models.board_export_job_status import BoardExportJobStatus +from miro_api.models.board_export_job_tasks_count import BoardExportJobTasksCount +from miro_api.models.board_export_job_tasks_list import BoardExportJobTasksList +from miro_api.models.board_export_jobs_list import BoardExportJobsList from miro_api.models.board_export_result import BoardExportResult +from miro_api.models.board_export_task import BoardExportTask +from miro_api.models.board_export_task_board import BoardExportTaskBoard +from miro_api.models.board_export_task_export_link import BoardExportTaskExportLink 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_links import BoardLinks from miro_api.models.board_member import BoardMember @@ -59,6 +65,8 @@ from miro_api.models.board_sharing_policy_change import BoardSharingPolicyChange from miro_api.models.board_subscription import BoardSubscription from miro_api.models.board_subscription_data import BoardSubscriptionData +from miro_api.models.board_user_group import BoardUserGroup +from miro_api.models.board_user_groups_page import BoardUserGroupsPage 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 @@ -84,11 +92,15 @@ from miro_api.models.copy_board_changes import CopyBoardChanges from miro_api.models.create_board_export_request import CreateBoardExportRequest from miro_api.models.create_board_subscription_request import CreateBoardSubscriptionRequest +from miro_api.models.create_board_user_groups_request import CreateBoardUserGroupsRequest from miro_api.models.create_document_item_using_file_from_device_request_data import ( CreateDocumentItemUsingFileFromDeviceRequestData, ) from miro_api.models.create_frame_item400_response import CreateFrameItem400Response +from miro_api.models.create_group_member_request import CreateGroupMemberRequest +from miro_api.models.create_group_request import CreateGroupRequest from miro_api.models.create_project_request import CreateProjectRequest +from miro_api.models.create_team_group_request import CreateTeamGroupRequest from miro_api.models.create_team_request import CreateTeamRequest from miro_api.models.created_by import CreatedBy from miro_api.models.created_by_platform_containers import CreatedByPlatformContainers @@ -127,6 +139,11 @@ from miro_api.models.embed_url_data_changes import EmbedUrlDataChanges from miro_api.models.embed_url_data_platformbulkcreateoperation import EmbedUrlDataPlatformbulkcreateoperation from miro_api.models.enterprise_get_organization_members200_response import EnterpriseGetOrganizationMembers200Response +from miro_api.models.enterprise_update_board_export_job200_response import EnterpriseUpdateBoardExportJob200Response +from miro_api.models.enterprise_update_board_export_job200_response_status import ( + EnterpriseUpdateBoardExportJob200ResponseStatus, +) +from miro_api.models.enterprise_update_board_export_job_request import EnterpriseUpdateBoardExportJobRequest from miro_api.models.error import Error from miro_api.models.error400 import Error400 from miro_api.models.error401 import Error401 @@ -135,6 +152,7 @@ from miro_api.models.error409 import Error409 from miro_api.models.error429 import Error429 from miro_api.models.error_response import ErrorResponse +from miro_api.models.export_job_status import ExportJobStatus from miro_api.models.fixed_ratio_geometry import FixedRatioGeometry from miro_api.models.fixed_ratio_geometry_platform_file_upload import FixedRatioGeometryPlatformFileUpload from miro_api.models.fixed_ratio_no_rotation_geometry import FixedRatioNoRotationGeometry @@ -179,7 +197,12 @@ from miro_api.models.get_tags_response import GetTagsResponse from miro_api.models.group import Group from miro_api.models.group_data import GroupData +from miro_api.models.group_member import GroupMember +from miro_api.models.group_members_page import GroupMembersPage from miro_api.models.group_response_short import GroupResponseShort +from miro_api.models.group_team import GroupTeam +from miro_api.models.group_teams_page import GroupTeamsPage +from miro_api.models.groups_page import GroupsPage from miro_api.models.image_create_request import ImageCreateRequest from miro_api.models.image_data import ImageData from miro_api.models.image_data_response import ImageDataResponse @@ -244,6 +267,8 @@ from miro_api.models.organization_members_search_response import OrganizationMembersSearchResponse from miro_api.models.page_links import PageLinks from miro_api.models.page_links_platform_experimental_features import PageLinksPlatformExperimentalFeatures +from miro_api.models.paginated_case_export_jobs_response import PaginatedCaseExportJobsResponse +from miro_api.models.paginated_case_export_jobs_response_data_inner import PaginatedCaseExportJobsResponseDataInner from miro_api.models.paginated_case_response import PaginatedCaseResponse from miro_api.models.paginated_legal_hold_content_items_response import PaginatedLegalHoldContentItemsResponse from miro_api.models.paginated_legal_hold_response import PaginatedLegalHoldResponse @@ -265,6 +290,7 @@ from miro_api.models.project_role import ProjectRole from miro_api.models.project_role_to_add import ProjectRoleToAdd from miro_api.models.project_settings import ProjectSettings +from miro_api.models.relationship import Relationship from miro_api.models.relative_offset import RelativeOffset from miro_api.models.revoke_token_request import RevokeTokenRequest from miro_api.models.self_link import SelfLink @@ -304,6 +330,8 @@ from miro_api.models.team_collaboration_settings_changes import TeamCollaborationSettingsChanges from miro_api.models.team_copy_access_level_settings import TeamCopyAccessLevelSettings from miro_api.models.team_copy_access_level_settings_changes import TeamCopyAccessLevelSettingsChanges +from miro_api.models.team_group import TeamGroup +from miro_api.models.team_groups_page import TeamGroupsPage from miro_api.models.team_information import TeamInformation from miro_api.models.team_invitation_settings import TeamInvitationSettings from miro_api.models.team_invitation_settings_changes import TeamInvitationSettingsChanges @@ -335,6 +363,7 @@ from miro_api.models.update_connector_style import UpdateConnectorStyle from miro_api.models.update_frame_item409_response import UpdateFrameItem409Response from miro_api.models.update_frame_style import UpdateFrameStyle +from miro_api.models.update_group_request import UpdateGroupRequest from miro_api.models.update_project_member_request import UpdateProjectMemberRequest from miro_api.models.update_project_request import UpdateProjectRequest from miro_api.models.update_project_settings_request import UpdateProjectSettingsRequest @@ -342,6 +371,12 @@ from miro_api.models.update_sticky_note_style import UpdateStickyNoteStyle from miro_api.models.update_team_settings_request import UpdateTeamSettingsRequest from miro_api.models.update_text_style import UpdateTextStyle +from miro_api.models.update_user_group_members_request import UpdateUserGroupMembersRequest +from miro_api.models.update_user_group_members_result_error import UpdateUserGroupMembersResultError +from miro_api.models.update_user_group_members_result_error_error import UpdateUserGroupMembersResultErrorError +from miro_api.models.update_user_group_members_result_inner import UpdateUserGroupMembersResultInner +from miro_api.models.update_user_group_members_result_operation import UpdateUserGroupMembersResultOperation +from miro_api.models.update_user_group_members_result_success import UpdateUserGroupMembersResultSuccess from miro_api.models.upload_file_from_device_data import UploadFileFromDeviceData from miro_api.models.user import User from miro_api.models.user_info_last_opened_by import UserInfoLastOpenedBy diff --git a/packages/miro-api-python/miro_api/models/board_changes.py b/packages/miro-api-python/miro_api/models/board_changes.py index a6d6624bd..fbecede31 100644 --- a/packages/miro-api-python/miro_api/models/board_changes.py +++ b/packages/miro-api-python/miro_api/models/board_changes.py @@ -38,11 +38,13 @@ class BoardChanges(BaseModel): ) policy: Optional[BoardPolicyChange] = None team_id: Optional[StrictStr] = Field( - default=None, description="Unique identifier (ID) of the team where the board must be placed.", alias="teamId" + default=None, + description="Unique identifier (ID) of the team where the board must be placed. **Note**: On Enterprise plan, boards can be moved via API by Board Owners, Co-Owners, and Content Admins. This behavior differs from the Miro UI, where only Board Owners can move boards. This difference is **intentional** and works as designed. On non-Enterprise plans, only Board Owners can move boards between teams—both via the API and the Miro UI.", + alias="teamId", ) project_id: Optional[StrictStr] = Field( default=None, - description="Unique identifier (ID) of the project to which the board must be added.", + description="Unique identifier (ID) of the project to which the board must be added. **Note**: Projects have been renamed to Spaces. Use this parameter to update the space. For Starter and Edu plans, Team Admins looking to move boards between Spaces/Projects of the same team would need to be direct Board Editors on the boards to move.", alias="projectId", ) additional_properties: Dict[str, Any] = {} diff --git a/packages/miro-api-python/miro_api/models/board_export_job.py b/packages/miro-api-python/miro_api/models/board_export_job.py new file mode 100644 index 000000000..17794186d --- /dev/null +++ b/packages/miro-api-python/miro_api/models/board_export_job.py @@ -0,0 +1,141 @@ +# 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.board_export_job_creator import BoardExportJobCreator +from miro_api.models.board_export_job_tasks_count import BoardExportJobTasksCount +from miro_api.models.board_format import BoardFormat +from typing import Optional, Set +from typing_extensions import Self + + +class BoardExportJob(BaseModel): + """ + Board export job. + """ # noqa: E501 + + id: Optional[StrictStr] = Field(default=None, description="Unique identifier of the board export job.") + name: Optional[StrictStr] = Field(default=None, description="Board export job name.") + board_format: Optional[BoardFormat] = Field(default=None, alias="boardFormat") + status: Optional[StrictStr] = Field( + default=None, + description="Indicates the current state of the board export job. Possible values: `created`: the job has been created but not yet started. Retry the status call after some time. `in_progress`: the job is in progress, and the results are not ready yet. Retry the status call after some time. `cancelled`: the job has been cancelled and will not produce any more results. `finished`: the job is complete. You can now get results for the board export job.", + ) + created_at: Optional[datetime] = Field(default=None, alias="createdAt") + modified_at: Optional[datetime] = Field(default=None, alias="modifiedAt") + tasks_count: Optional[BoardExportJobTasksCount] = Field(default=None, alias="tasksCount") + creator: Optional[BoardExportJobCreator] = None + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = [ + "id", + "name", + "boardFormat", + "status", + "createdAt", + "modifiedAt", + "tasksCount", + "creator", + ] + + 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 BoardExportJob 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 tasks_count + if self.tasks_count: + _dict["tasksCount"] = self.tasks_count.to_dict() + # override the default output from pydantic by calling `to_dict()` of creator + if self.creator: + _dict["creator"] = self.creator.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 BoardExportJob 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"), + "name": obj.get("name"), + "boardFormat": obj.get("boardFormat"), + "status": obj.get("status"), + "createdAt": obj.get("createdAt"), + "modifiedAt": obj.get("modifiedAt"), + "tasksCount": ( + BoardExportJobTasksCount.from_dict(obj["tasksCount"]) if obj.get("tasksCount") is not None else None + ), + "creator": BoardExportJobCreator.from_dict(obj["creator"]) if obj.get("creator") 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/board_export_job_creator.py b/packages/miro-api-python/miro_api/models/board_export_job_creator.py new file mode 100644 index 000000000..f8ffc1cbf --- /dev/null +++ b/packages/miro-api-python/miro_api/models/board_export_job_creator.py @@ -0,0 +1,101 @@ +# 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 BoardExportJobCreator(BaseModel): + """ + BoardExportJobCreator + """ # noqa: E501 + + id: Optional[StrictStr] = Field( + default=None, description="Unique identifier of the user who created the board export job." + ) + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["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 BoardExportJobCreator 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 BoardExportJobCreator 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")}) + # 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_export_job_status.py b/packages/miro-api-python/miro_api/models/board_export_job_status.py index a2e346843..b342f0b3a 100644 --- a/packages/miro-api-python/miro_api/models/board_export_job_status.py +++ b/packages/miro-api-python/miro_api/models/board_export_job_status.py @@ -17,8 +17,9 @@ import re # noqa: F401 import json -from pydantic import BaseModel, Field, StrictStr +from pydantic import BaseModel, Field from typing import Any, ClassVar, Dict, List +from miro_api.models.export_job_status import ExportJobStatus from typing import Optional, Set from typing_extensions import Self @@ -28,10 +29,7 @@ class BoardExportJobStatus(BaseModel): BoardExportJobStatus """ # noqa: E501 - job_status: StrictStr = Field( - description="Indicates the current state of the board export job. Possible values: `CREATED`: the job has been created but not yet started. Retry the status call after some time. `IN_PROGRESS`: the job is in progress, and the results are not ready yet. Retry the status call after some time. `FINISHED`: the job is complete. You can now get results for the board export job.", - alias="jobStatus", - ) + job_status: ExportJobStatus = Field(alias="jobStatus") additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["jobStatus"] diff --git a/packages/miro-api-python/miro_api/models/board_export_job_tasks_count.py b/packages/miro-api-python/miro_api/models/board_export_job_tasks_count.py new file mode 100644 index 000000000..33097f872 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/board_export_job_tasks_count.py @@ -0,0 +1,101 @@ +# 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 +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + + +class BoardExportJobTasksCount(BaseModel): + """ + BoardExportJobTasksCount + """ # noqa: E501 + + total: Optional[StrictInt] = Field(default=None, description="Total number of tasks in the export.") + success: Optional[StrictInt] = Field(default=None, description="Successfully exported tasks count.") + error: Optional[StrictInt] = Field(default=None, description="Failed tasks count.") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["total", "success", "error"] + + 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 BoardExportJobTasksCount 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 BoardExportJobTasksCount from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"total": obj.get("total"), "success": obj.get("success"), "error": obj.get("error")}) + # 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_export_job_tasks_list.py b/packages/miro-api-python/miro_api/models/board_export_job_tasks_list.py new file mode 100644 index 000000000..5c22d1470 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/board_export_job_tasks_list.py @@ -0,0 +1,120 @@ +# 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.board_export_task import BoardExportTask +from typing import Optional, Set +from typing_extensions import Self + + +class BoardExportJobTasksList(BaseModel): + """ + BoardExportJobTasksList + """ # noqa: E501 + + total: Optional[StrictInt] = Field(default=None, description="Total number of results in the collection.") + 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.", + ) + data: Optional[List[BoardExportTask]] = None + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["total", "cursor", "data"] + + 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 BoardExportJobTasksList 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 BoardExportJobTasksList from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "total": obj.get("total"), + "cursor": obj.get("cursor"), + "data": ( + [BoardExportTask.from_dict(_item) for _item in obj["data"]] if obj.get("data") 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/board_export_jobs_list.py b/packages/miro-api-python/miro_api/models/board_export_jobs_list.py new file mode 100644 index 000000000..166328647 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/board_export_jobs_list.py @@ -0,0 +1,120 @@ +# 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.board_export_job import BoardExportJob +from typing import Optional, Set +from typing_extensions import Self + + +class BoardExportJobsList(BaseModel): + """ + List of export jobs. + """ # noqa: E501 + + total: Optional[StrictInt] = Field(default=None, description="Total number of results in the collection.") + 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.", + ) + data: Optional[List[BoardExportJob]] = None + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["total", "cursor", "data"] + + 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 BoardExportJobsList 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 BoardExportJobsList from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "total": obj.get("total"), + "cursor": obj.get("cursor"), + "data": ( + [BoardExportJob.from_dict(_item) for _item in obj["data"]] if obj.get("data") 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/board_export_task.py b/packages/miro-api-python/miro_api/models/board_export_task.py new file mode 100644 index 000000000..8a8524c82 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/board_export_task.py @@ -0,0 +1,144 @@ +# 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, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from miro_api.models.board_export_task_board import BoardExportTaskBoard +from typing import Optional, Set +from typing_extensions import Self + + +class BoardExportTask(BaseModel): + """ + BoardExportTask + """ # noqa: E501 + + id: StrictStr = Field(description="Unique identifier of the board export task.") + status: StrictStr = Field( + description="Indicates the status of the individual board export task. Possible values: `SUCCESS`: the board export task was completed successfully and the results are available. `ERROR`: the board export task encountered an error and failed to complete. The `errorMessage` field provides more information on the error. `CANCELLED`: the board export task was cancelled. `SCHEDULED`: the board export task has been scheduled and is waiting to be processed. `CREATED`: the board export task was created." + ) + artifact_expired_at: Optional[datetime] = Field( + default=None, + description="The date and time when the artifact will no longer be available in the S3 storage. After this time, the link will no longer be valid and the exported files will not be accessible. 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="artifactExpiredAt", + ) + size_in_bytes: Optional[StrictInt] = Field( + default=None, description="Size of the exported artifact in bytes.", alias="sizeInBytes" + ) + error_message: Optional[StrictStr] = Field( + default=None, + description="Contains the description of the error that occurred during a board export task.", + alias="errorMessage", + ) + error_type: Optional[StrictStr] = Field( + default=None, + description="Indicates the type of error encountered during the board export task. Possible values: `TEMPORARY`: the board export task encountered a temporary error. Retry the board export task after some time. `FATAL`: the board export failed and cannot be retried. This export will never succeed due to issues such as board corruption, non-existence, or other unrecoverable errors. Please verify the board's state or contact support if assistance is needed. `UNKNOWN`: the board export task encountered an unexpected exception. Retry the board export task after some time.", + alias="errorType", + ) + board: Optional[BoardExportTaskBoard] = None + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = [ + "id", + "status", + "artifactExpiredAt", + "sizeInBytes", + "errorMessage", + "errorType", + "board", + ] + + 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 BoardExportTask 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 board + if self.board: + _dict["board"] = self.board.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 BoardExportTask 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"), + "status": obj.get("status"), + "artifactExpiredAt": obj.get("artifactExpiredAt"), + "sizeInBytes": obj.get("sizeInBytes"), + "errorMessage": obj.get("errorMessage"), + "errorType": obj.get("errorType"), + "board": BoardExportTaskBoard.from_dict(obj["board"]) if obj.get("board") 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/board_export_task_board.py b/packages/miro-api-python/miro_api/models/board_export_task_board.py new file mode 100644 index 000000000..15f70b9ac --- /dev/null +++ b/packages/miro-api-python/miro_api/models/board_export_task_board.py @@ -0,0 +1,99 @@ +# 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 BoardExportTaskBoard(BaseModel): + """ + Information about a board in the board export task. + """ # noqa: E501 + + key: Optional[StrictStr] = Field(default=None, description="Unique identifier of the board.") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["key"] + + 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 BoardExportTaskBoard 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 BoardExportTaskBoard from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"key": obj.get("key")}) + # 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_export_task_export_link.py b/packages/miro-api-python/miro_api/models/board_export_task_export_link.py new file mode 100644 index 000000000..4643b1d57 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/board_export_task_export_link.py @@ -0,0 +1,141 @@ +# 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 typing import Optional, Set +from typing_extensions import Self + + +class BoardExportTaskExportLink(BaseModel): + """ + Board export task results link. + """ # noqa: E501 + + status: StrictStr = Field( + description="Indicates the status of the individual board export task. Possible values: `SUCCESS`: the board export task was completed successfully and the results are available. `ERROR`: the board export task encountered an error and failed to complete. The `errorMessage` field provides more information on the error. `CANCELLED`: the board export task was cancelled. `SCHEDULED`: the board export task has been scheduled and is waiting to be processed. `CREATED`: the board export task was created." + ) + export_link: Optional[StrictStr] = Field( + default=None, description="URL of the S3 bucket that contains the exported files.", alias="exportLink" + ) + artifact_expired_at: Optional[datetime] = Field( + default=None, + description="The date and time when the artifact will no longer be available in the S3 storage. After this time, the link will no longer be valid and the exported files will not be accessible. 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="artifactExpiredAt", + ) + link_expired_at: Optional[datetime] = Field( + default=None, + description="The date and time when the export link will expire. After this time, the link will no longer be valid. 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="linkExpiredAt", + ) + error_message: Optional[StrictStr] = Field( + default=None, + description="Contains the description of the error that occurred during a board export task results link creation.", + alias="errorMessage", + ) + error_type: Optional[StrictStr] = Field( + default=None, + description="Indicates the type of error encountered during the board export task results link creation. Possible values: `TEMPORARY`: the board export task encountered a temporary error. Retry the board export task results link creation after some time. `FATAL`: the board export failed and cannot be retried. This export will never succeed due to issues such as board corruption, non-existence, or other unrecoverable errors. Please verify the board's state or contact support if assistance is needed. `UNKNOWN`: the board export task encountered an unexpected exception. Retry the board export task results link creation after some time.", + alias="errorType", + ) + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = [ + "status", + "exportLink", + "artifactExpiredAt", + "linkExpiredAt", + "errorMessage", + "errorType", + ] + + 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 BoardExportTaskExportLink 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 BoardExportTaskExportLink from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "status": obj.get("status"), + "exportLink": obj.get("exportLink"), + "artifactExpiredAt": obj.get("artifactExpiredAt"), + "linkExpiredAt": obj.get("linkExpiredAt"), + "errorMessage": obj.get("errorMessage"), + "errorType": obj.get("errorType"), + } + ) + # 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_export_task_result.py b/packages/miro-api-python/miro_api/models/board_export_task_result.py index a5f82dd02..1f8d0ce4e 100644 --- a/packages/miro-api-python/miro_api/models/board_export_task_result.py +++ b/packages/miro-api-python/miro_api/models/board_export_task_result.py @@ -38,7 +38,7 @@ class BoardExportTaskResult(BaseModel): default=None, description="URL of the S3 bucket that contains the exported files.", alias="exportLink" ) status: StrictStr = Field( - description="Indicates the status of the individual board export task. Possible values: `SUCCESS`: the board export task was completed successfully and the results are available. `ERROR`: the board export task encountered an error and failed to complete. The `errorMessage` field provides more information on the error." + description="Indicates the status of the individual board export task. Possible values: `SUCCESS`: the board export task was completed successfully and the results are available. `ERROR`: the board export task encountered an error and failed to complete. The `errorMessage` field provides more information on the error. `CANCELLED`: the board export task was cancelled. `SCHEDULED`: the board export task has been scheduled and is waiting to be processed. `CREATED`: the board export task was created." ) error_type: Optional[StrictStr] = Field( default=None, diff --git a/packages/miro-api-python/miro_api/models/board_format.py b/packages/miro-api-python/miro_api/models/board_format.py new file mode 100644 index 000000000..abd171fd9 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/board_format.py @@ -0,0 +1,36 @@ +# 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 json +from enum import Enum +from typing_extensions import Self + + +class BoardFormat(str, Enum): + """ + Specifies the format of the file to which the board will be exported. Supported formats include SVG (default), HTML, and PDF. + """ + + """ + allowed enum values + """ + SVG = "SVG" + HTML = "HTML" + PDF = "PDF" + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of BoardFormat from a JSON string""" + return cls(json.loads(json_str)) 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 9fb6125b2..d75e599ec 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 @@ -21,6 +21,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.relationship import Relationship from typing import Optional, Set from typing_extensions import Self @@ -57,6 +58,9 @@ class BoardItemContentLog(BaseModel): default=None, description="Object that contains information about the state of the board item after the action was performed.", ) + relationships: Optional[List[Relationship]] = Field( + default=None, description="Contains the list of items related to the current board item." + ) additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = [ "id", @@ -67,6 +71,7 @@ class BoardItemContentLog(BaseModel): "itemType", "itemId", "state", + "relationships", ] @field_validator("action_type") @@ -134,6 +139,13 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of actor if self.actor: _dict["actor"] = self.actor.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in relationships (list) + _items = [] + if self.relationships: + for _item in self.relationships: + if _item: + _items.append(_item.to_dict()) + _dict["relationships"] = _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(): @@ -160,6 +172,11 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "itemType": obj.get("itemType"), "itemId": obj.get("itemId"), "state": obj.get("state"), + "relationships": ( + [Relationship.from_dict(_item) for _item in obj["relationships"]] + if obj.get("relationships") is not None + else None + ), } ) # store additional fields in additional_properties diff --git a/packages/miro-api-python/miro_api/models/board_sharing_policy.py b/packages/miro-api-python/miro_api/models/board_sharing_policy.py index decdadf3b..227a10ccb 100644 --- a/packages/miro-api-python/miro_api/models/board_sharing_policy.py +++ b/packages/miro-api-python/miro_api/models/board_sharing_policy.py @@ -17,7 +17,7 @@ import re # noqa: F401 import json -from pydantic import BaseModel, Field, StrictStr, field_validator +from pydantic import BaseModel, Field, StrictBool, StrictStr, field_validator from typing import Any, ClassVar, Dict, List, Optional from typing import Optional, Set from typing_extensions import Self @@ -29,6 +29,11 @@ class BoardSharingPolicy(BaseModel): """ # noqa: E501 access: Optional[StrictStr] = Field(default=None, description="Defines the public-level access to the board.") + access_password_required: Optional[StrictBool] = Field( + default=False, + description="Defines if a password is required to access the board.", + alias="accessPasswordRequired", + ) invite_to_account_and_board_link_access: Optional[StrictStr] = Field( default="no_access", description="Defines the user role when inviting a user via the invite to team and board link. For Enterprise users, the `inviteToAccountAndBoardLinkAccess` parameter is always set to `no_access`.", @@ -45,6 +50,7 @@ class BoardSharingPolicy(BaseModel): additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = [ "access", + "accessPasswordRequired", "inviteToAccountAndBoardLinkAccess", "organizationAccess", "teamAccess", @@ -153,6 +159,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate( { "access": obj.get("access"), + "accessPasswordRequired": ( + obj.get("accessPasswordRequired") if obj.get("accessPasswordRequired") is not None else False + ), "inviteToAccountAndBoardLinkAccess": ( obj.get("inviteToAccountAndBoardLinkAccess") if obj.get("inviteToAccountAndBoardLinkAccess") is not None diff --git a/packages/miro-api-python/miro_api/models/board_user_group.py b/packages/miro-api-python/miro_api/models/board_user_group.py new file mode 100644 index 000000000..5dbd7aef2 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/board_user_group.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, StrictStr, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + + +class BoardUserGroup(BaseModel): + """ + BoardUserGroup + """ # noqa: E501 + + id: StrictStr = Field(description="User group ID.") + role: StrictStr = Field(description="Role of the user group in the team.") + type: Optional[Any] = Field(default=None, description="Object type") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["id", "role", "type"] + + @field_validator("role") + def role_validate_enum(cls, value): + """Validates the enum""" + if value not in set(["VIEWER", "COMMENTER", "EDITOR"]): + raise ValueError("must be one of enum values ('VIEWER', 'COMMENTER', 'EDITOR')") + return value + + 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 BoardUserGroup 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 + + # set to None if type (nullable) is None + # and model_fields_set contains the field + if self.type is None and "type" in self.model_fields_set: + _dict["type"] = None + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of BoardUserGroup 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"), + "role": obj.get("role") if obj.get("role") is not None else "VIEWER", + "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/board_user_groups_page.py b/packages/miro-api-python/miro_api/models/board_user_groups_page.py new file mode 100644 index 000000000..275a0920a --- /dev/null +++ b/packages/miro-api-python/miro_api/models/board_user_groups_page.py @@ -0,0 +1,129 @@ +# 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_extensions import Annotated +from miro_api.models.board_user_group import BoardUserGroup +from typing import Optional, Set +from typing_extensions import Self + + +class BoardUserGroupsPage(BaseModel): + """ + Page of user groups that with access to the board. + """ # noqa: E501 + + limit: 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 in the response is greater than the limit specified, the response returns the cursor parameter with a value." + ) + size: Annotated[int, Field(le=100, strict=True, ge=0)] = Field( + 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: List[BoardUserGroup] = Field(description="List of user groups.") + 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 BoardUserGroupsPage 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 BoardUserGroupsPage 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") if obj.get("limit") is not None else 100, + "size": obj.get("size") if obj.get("size") is not None else 100, + "data": ( + [BoardUserGroup.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/case_request.py b/packages/miro-api-python/miro_api/models/case_request.py index b010d2766..9fbcd0059 100644 --- a/packages/miro-api-python/miro_api/models/case_request.py +++ b/packages/miro-api-python/miro_api/models/case_request.py @@ -28,8 +28,8 @@ class CaseRequest(BaseModel): CaseRequest """ # noqa: E501 - name: StrictStr = Field(description="The name of the case") - description: Optional[StrictStr] = Field(default=None, description="The description of the case") + name: StrictStr = Field(description="The name of the case.") + description: Optional[StrictStr] = Field(default=None, description="The description of the case.") additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["name", "description"] diff --git a/packages/miro-api-python/miro_api/models/case_response.py b/packages/miro-api-python/miro_api/models/case_response.py index 2615208ca..dd06cd724 100644 --- a/packages/miro-api-python/miro_api/models/case_response.py +++ b/packages/miro-api-python/miro_api/models/case_response.py @@ -38,6 +38,7 @@ class CaseResponse(BaseModel): name: StrictStr = Field(description="The name of the case.") description: Optional[StrictStr] = Field(default=None, description="The description of the case.") created_by: User = Field(alias="createdBy") + last_modified_by: Optional[User] = Field(default=None, alias="lastModifiedBy") created_at: datetime = Field(alias="createdAt") last_modified_at: datetime = Field(alias="lastModifiedAt") additional_properties: Dict[str, Any] = {} @@ -47,6 +48,7 @@ class CaseResponse(BaseModel): "name", "description", "createdBy", + "lastModifiedBy", "createdAt", "lastModifiedAt", ] @@ -110,6 +112,9 @@ def to_dict(self) -> Dict[str, Any]: # 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 last_modified_by + if self.last_modified_by: + _dict["lastModifiedBy"] = self.last_modified_by.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(): @@ -133,6 +138,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "name": obj.get("name"), "description": obj.get("description"), "createdBy": User.from_dict(obj["createdBy"]) if obj.get("createdBy") is not None else None, + "lastModifiedBy": ( + User.from_dict(obj["lastModifiedBy"]) if obj.get("lastModifiedBy") is not None else None + ), "createdAt": obj.get("createdAt"), "lastModifiedAt": obj.get("lastModifiedAt"), } 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 22028eeea..5e32ee9b0 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 @@ -17,9 +17,10 @@ import re # noqa: F401 import json -from pydantic import BaseModel, Field, StrictStr, field_validator +from pydantic import BaseModel, Field, StrictStr from typing import Any, ClassVar, Dict, List, Optional from typing_extensions import Annotated +from miro_api.models.board_format import BoardFormat from typing import Optional, Set from typing_extensions import Self @@ -32,24 +33,10 @@ class CreateBoardExportRequest(BaseModel): 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_format: Optional[StrictStr] = Field( - default="SVG", - description="Specifies the format of the file to which the board will be exported. Supported formats include SVG (default), HTML, and PDF.", - alias="boardFormat", - ) + board_format: Optional[BoardFormat] = Field(default=None, alias="boardFormat") additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["boardIds", "boardFormat"] - @field_validator("board_format") - def board_format_validate_enum(cls, value): - """Validates the enum""" - if value is None: - return value - - if value not in set(["SVG", "HTML", "PDF"]): - raise ValueError("must be one of enum values ('SVG', 'HTML', 'PDF')") - return value - model_config = { "populate_by_name": True, "validate_assignment": True, @@ -108,12 +95,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( - { - "boardIds": obj.get("boardIds"), - "boardFormat": obj.get("boardFormat") if obj.get("boardFormat") is not None else "SVG", - } - ) + _obj = cls.model_validate({"boardIds": obj.get("boardIds"), "boardFormat": obj.get("boardFormat")}) # 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/create_board_user_groups_request.py b/packages/miro-api-python/miro_api/models/create_board_user_groups_request.py new file mode 100644 index 000000000..18e095a2a --- /dev/null +++ b/packages/miro-api-python/miro_api/models/create_board_user_groups_request.py @@ -0,0 +1,112 @@ +# 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, field_validator +from typing import Any, ClassVar, Dict, List +from typing import Optional, Set +from typing_extensions import Self + + +class CreateBoardUserGroupsRequest(BaseModel): + """ + CreateBoardUserGroupsRequest + """ # noqa: E501 + + user_group_ids: List[StrictStr] = Field(description="List of user group ids.", alias="userGroupIds") + role: StrictStr = Field(description="Role of the user group in the team.") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["userGroupIds", "role"] + + @field_validator("role") + def role_validate_enum(cls, value): + """Validates the enum""" + if value not in set(["VIEWER", "COMMENTER", "EDITOR"]): + raise ValueError("must be one of enum values ('VIEWER', 'COMMENTER', 'EDITOR')") + return value + + 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 CreateBoardUserGroupsRequest 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 CreateBoardUserGroupsRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "userGroupIds": obj.get("userGroupIds"), + "role": obj.get("role") if obj.get("role") is not None else "VIEWER", + } + ) + # 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_group_member_request.py b/packages/miro-api-python/miro_api/models/create_group_member_request.py new file mode 100644 index 000000000..a27f03dd9 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/create_group_member_request.py @@ -0,0 +1,99 @@ +# 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 +from typing import Optional, Set +from typing_extensions import Self + + +class CreateGroupMemberRequest(BaseModel): + """ + CreateGroupMemberRequest + """ # noqa: E501 + + email: StrictStr = Field(description="User email") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["email"] + + 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 CreateGroupMemberRequest 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 CreateGroupMemberRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"email": obj.get("email")}) + # 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_group_request.py b/packages/miro-api-python/miro_api/models/create_group_request.py new file mode 100644 index 000000000..ec5118e44 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/create_group_request.py @@ -0,0 +1,103 @@ +# 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 +from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated +from typing import Optional, Set +from typing_extensions import Self + + +class CreateGroupRequest(BaseModel): + """ + CreateGroupRequest + """ # noqa: E501 + + name: Annotated[str, Field(min_length=1, strict=True, max_length=60)] = Field(description="User group name.") + description: Optional[Annotated[str, Field(min_length=0, strict=True, max_length=300)]] = Field( + default=None, description="Description of the user group being created." + ) + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["name", "description"] + + 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 CreateGroupRequest 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 CreateGroupRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"name": obj.get("name"), "description": obj.get("description")}) + # 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_team_group_request.py b/packages/miro-api-python/miro_api/models/create_team_group_request.py new file mode 100644 index 000000000..47f5e828c --- /dev/null +++ b/packages/miro-api-python/miro_api/models/create_team_group_request.py @@ -0,0 +1,107 @@ +# 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, field_validator +from typing import Any, ClassVar, Dict, List +from typing import Optional, Set +from typing_extensions import Self + + +class CreateTeamGroupRequest(BaseModel): + """ + CreateTeamGroupRequest + """ # noqa: E501 + + user_group_id: StrictStr = Field(description="User group ID.", alias="userGroupId") + role: StrictStr = Field(description="Role of user group in the team.") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["userGroupId", "role"] + + @field_validator("role") + def role_validate_enum(cls, value): + """Validates the enum""" + if value not in set(["member"]): + raise ValueError("must be one of enum values ('member')") + return value + + 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 CreateTeamGroupRequest 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 CreateTeamGroupRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"userGroupId": obj.get("userGroupId"), "role": obj.get("role")}) + # 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/enterprise_update_board_export_job200_response.py b/packages/miro-api-python/miro_api/models/enterprise_update_board_export_job200_response.py new file mode 100644 index 000000000..5788201c7 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/enterprise_update_board_export_job200_response.py @@ -0,0 +1,113 @@ +# 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 +from miro_api.models.enterprise_update_board_export_job200_response_status import ( + EnterpriseUpdateBoardExportJob200ResponseStatus, +) +from typing import Optional, Set +from typing_extensions import Self + + +class EnterpriseUpdateBoardExportJob200Response(BaseModel): + """ + EnterpriseUpdateBoardExportJob200Response + """ # noqa: E501 + + status: EnterpriseUpdateBoardExportJob200ResponseStatus + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["status"] + + 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 EnterpriseUpdateBoardExportJob200Response 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 status + if self.status: + _dict["status"] = self.status.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 EnterpriseUpdateBoardExportJob200Response from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "status": ( + EnterpriseUpdateBoardExportJob200ResponseStatus.from_dict(obj["status"]) + if obj.get("status") 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/enterprise_update_board_export_job200_response_status.py b/packages/miro-api-python/miro_api/models/enterprise_update_board_export_job200_response_status.py new file mode 100644 index 000000000..b2b0ad497 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/enterprise_update_board_export_job200_response_status.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 +from typing import Any, ClassVar, Dict, List +from miro_api.models.export_job_status import ExportJobStatus +from typing import Optional, Set +from typing_extensions import Self + + +class EnterpriseUpdateBoardExportJob200ResponseStatus(BaseModel): + """ + EnterpriseUpdateBoardExportJob200ResponseStatus + """ # noqa: E501 + + job_status: ExportJobStatus = Field(alias="jobStatus") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["jobStatus"] + + 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 EnterpriseUpdateBoardExportJob200ResponseStatus 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 EnterpriseUpdateBoardExportJob200ResponseStatus from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"jobStatus": obj.get("jobStatus")}) + # 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/enterprise_update_board_export_job_request.py b/packages/miro-api-python/miro_api/models/enterprise_update_board_export_job_request.py new file mode 100644 index 000000000..e86f8fc8c --- /dev/null +++ b/packages/miro-api-python/miro_api/models/enterprise_update_board_export_job_request.py @@ -0,0 +1,106 @@ +# 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, field_validator +from typing import Any, ClassVar, Dict, List +from typing import Optional, Set +from typing_extensions import Self + + +class EnterpriseUpdateBoardExportJobRequest(BaseModel): + """ + EnterpriseUpdateBoardExportJobRequest + """ # noqa: E501 + + status: StrictStr = Field(description="Only the `CANCELLED` status is currently supported.") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["status"] + + @field_validator("status") + def status_validate_enum(cls, value): + """Validates the enum""" + if value not in set(["CANCELLED"]): + raise ValueError("must be one of enum values ('CANCELLED')") + return value + + 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 EnterpriseUpdateBoardExportJobRequest 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 EnterpriseUpdateBoardExportJobRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"status": obj.get("status")}) + # 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/export_job_status.py b/packages/miro-api-python/miro_api/models/export_job_status.py new file mode 100644 index 000000000..f5d7264b7 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/export_job_status.py @@ -0,0 +1,37 @@ +# 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 json +from enum import Enum +from typing_extensions import Self + + +class ExportJobStatus(str, Enum): + """ + Indicates the current state of the board export job. Possible values: `CREATED`: the job has been created but not yet started. Retry the status call after some time. `IN_PROGRESS`: the job is in progress, and the results are not ready yet. Retry the status call after some time. `CANCELLED`: the job has been cancelled and will not produce any more results. `FINISHED`: the job is complete. You can now get results for the board export job. + """ + + """ + allowed enum values + """ + CREATED = "CREATED" + IN_PROGRESS = "IN_PROGRESS" + CANCELLED = "CANCELLED" + FINISHED = "FINISHED" + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of ExportJobStatus from a JSON string""" + return cls(json.loads(json_str)) diff --git a/packages/miro-api-python/miro_api/models/group_member.py b/packages/miro-api-python/miro_api/models/group_member.py new file mode 100644 index 000000000..d46bdffa8 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/group_member.py @@ -0,0 +1,107 @@ +# 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 +from typing import Optional, Set +from typing_extensions import Self + + +class GroupMember(BaseModel): + """ + GroupMember + """ # noqa: E501 + + id: StrictStr = Field(description="User ID") + email: StrictStr = Field(description="User email") + type: StrictStr = Field(description="Object type") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["id", "email", "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 GroupMember 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 GroupMember 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"), + "type": obj.get("type") if obj.get("type") is not None else "user-group-member", + } + ) + # 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/group_members_page.py b/packages/miro-api-python/miro_api/models/group_members_page.py new file mode 100644 index 000000000..44e30e3df --- /dev/null +++ b/packages/miro-api-python/miro_api/models/group_members_page.py @@ -0,0 +1,129 @@ +# 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_extensions import Annotated +from miro_api.models.group_member import GroupMember +from typing import Optional, Set +from typing_extensions import Self + + +class GroupMembersPage(BaseModel): + """ + Page of members that match the search query. + """ # noqa: E501 + + limit: 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 in the response is greater than the limit specified, the response returns the cursor parameter with a value." + ) + size: Annotated[int, Field(le=100, strict=True, ge=0)] = Field( + 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: List[GroupMember] = Field(description="List of group members.") + 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 GroupMembersPage 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 GroupMembersPage 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") if obj.get("limit") is not None else 100, + "size": obj.get("size") if obj.get("size") is not None else 100, + "data": ( + [GroupMember.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/group_team.py b/packages/miro-api-python/miro_api/models/group_team.py new file mode 100644 index 000000000..28e59b175 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/group_team.py @@ -0,0 +1,114 @@ +# 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, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + + +class GroupTeam(BaseModel): + """ + GroupTeam + """ # noqa: E501 + + id: StrictStr = Field(description="Team ID") + role: StrictStr = Field(description="Role of the user group in the team") + type: Optional[StrictStr] = Field(default="user-group-team", description="Object type") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["id", "role", "type"] + + @field_validator("role") + def role_validate_enum(cls, value): + """Validates the enum""" + if value not in set(["member"]): + raise ValueError("must be one of enum values ('member')") + return value + + 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 GroupTeam 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 GroupTeam 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"), + "role": obj.get("role") if obj.get("role") is not None else "member", + "type": obj.get("type") if obj.get("type") is not None else "user-group-team", + } + ) + # 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/group_teams_page.py b/packages/miro-api-python/miro_api/models/group_teams_page.py new file mode 100644 index 000000000..b25d48e1a --- /dev/null +++ b/packages/miro-api-python/miro_api/models/group_teams_page.py @@ -0,0 +1,127 @@ +# 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_extensions import Annotated +from miro_api.models.group_team import GroupTeam +from typing import Optional, Set +from typing_extensions import Self + + +class GroupTeamsPage(BaseModel): + """ + Page of teams that match the search query. + """ # noqa: E501 + + limit: 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 in the response is greater than the limit specified, the response returns the cursor parameter with a value." + ) + size: Annotated[int, Field(le=100, strict=True, ge=0)] = Field( + 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: List[GroupTeam] = Field(description="List of teams.") + 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 GroupTeamsPage 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 GroupTeamsPage 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") if obj.get("limit") is not None else 100, + "size": obj.get("size") if obj.get("size") is not None else 100, + "data": [GroupTeam.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/groups_page.py b/packages/miro-api-python/miro_api/models/groups_page.py new file mode 100644 index 000000000..ebbb37791 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/groups_page.py @@ -0,0 +1,127 @@ +# 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_extensions import Annotated +from miro_api.models.group import Group +from typing import Optional, Set +from typing_extensions import Self + + +class GroupsPage(BaseModel): + """ + Page of groups that match the search query. + """ # noqa: E501 + + limit: 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 in the response is greater than the limit specified, the response returns the cursor parameter with a value." + ) + size: Annotated[int, Field(le=100, strict=True, ge=0)] = Field( + 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: List[Group] = Field(description="List of groups.") + 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 GroupsPage 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 GroupsPage 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") if obj.get("limit") is not None else 100, + "size": obj.get("size") if obj.get("size") is not None else 100, + "data": [Group.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/legal_hold_content_items_response.py b/packages/miro-api-python/miro_api/models/legal_hold_content_items_response.py index 4b9481e24..0d590a16d 100644 --- a/packages/miro-api-python/miro_api/models/legal_hold_content_items_response.py +++ b/packages/miro-api-python/miro_api/models/legal_hold_content_items_response.py @@ -17,9 +17,8 @@ import re # noqa: F401 import json -from pydantic import BaseModel, Field, StrictStr, field_validator +from pydantic import BaseModel, Field, StrictStr from typing import Any, ClassVar, Dict, List, Optional -from typing_extensions import Annotated from typing import Optional, Set from typing_extensions import Self @@ -29,7 +28,6 @@ class LegalHoldContentItemsResponse(BaseModel): LegalHoldContentItemsResponse """ # noqa: E501 - id: Annotated[str, Field(strict=True)] = Field(description="Unique identifier of the content item.") content_id: Optional[StrictStr] = Field( default=None, description="Identifier for the piece of content referenced by a content item. In the case of a board, this represents the `boardKey` and can be used to export a board using the Discovery APIs.", @@ -37,14 +35,7 @@ class LegalHoldContentItemsResponse(BaseModel): ) type: StrictStr = Field(description="Type of the content item that is returned. ") additional_properties: Dict[str, Any] = {} - __properties: ClassVar[List[str]] = ["id", "contentId", "type"] - - @field_validator("id") - def id_validate_regular_expression(cls, value): - """Validates the regular expression""" - if not re.match(r"^[0-9]+$", value): - raise ValueError(r"must validate the regular expression /^[0-9]+$/") - return value + __properties: ClassVar[List[str]] = ["contentId", "type"] model_config = { "populate_by_name": True, @@ -104,7 +95,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"), "contentId": obj.get("contentId"), "type": obj.get("type")}) + _obj = cls.model_validate({"contentId": obj.get("contentId"), "type": obj.get("type")}) # 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/legal_hold_request_scope.py b/packages/miro-api-python/miro_api/models/legal_hold_request_scope.py index c5e673653..45b6c52bf 100644 --- a/packages/miro-api-python/miro_api/models/legal_hold_request_scope.py +++ b/packages/miro-api-python/miro_api/models/legal_hold_request_scope.py @@ -27,7 +27,7 @@ class LegalHoldRequestScope(BaseModel): """ - The legal hold scope determines the criteria used to put content items under hold. The variants of this field might get extended in the future, although the most common use case is to put users under hold. Currently only the `users` scope is supported. However, the parsing of this field must ignore unexpected variants. + The legal hold scope determines the criteria used to put content items under hold. The variants of this field might get extended in the future, although the most common use case is to put users under hold. Currently only the `users` scope is supported. However, the parsing of this field must ignore unexpected variants. The request must always include a list of all users to be placed under hold, whether it's for a new legal hold or an update to an existing one. You can have up to 200 users per legal hold, including users added in legal hold updates. """ # data type: LegalHoldRequestScopeUsers diff --git a/packages/miro-api-python/miro_api/models/legal_hold_response.py b/packages/miro-api-python/miro_api/models/legal_hold_response.py index cb8b5099f..09796f7c1 100644 --- a/packages/miro-api-python/miro_api/models/legal_hold_response.py +++ b/packages/miro-api-python/miro_api/models/legal_hold_response.py @@ -43,6 +43,7 @@ class LegalHoldResponse(BaseModel): state: LegalHoldState scope: LegalHoldResponseScope created_by: User = Field(alias="createdBy") + last_modified_by: Optional[User] = Field(default=None, alias="lastModifiedBy") created_at: datetime = Field(alias="createdAt") last_modified_at: datetime = Field(alias="lastModifiedAt") additional_properties: Dict[str, Any] = {} @@ -55,6 +56,7 @@ class LegalHoldResponse(BaseModel): "state", "scope", "createdBy", + "lastModifiedBy", "createdAt", "lastModifiedAt", ] @@ -128,6 +130,9 @@ def to_dict(self) -> Dict[str, Any]: # 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 last_modified_by + if self.last_modified_by: + _dict["lastModifiedBy"] = self.last_modified_by.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(): @@ -154,6 +159,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "state": obj.get("state"), "scope": LegalHoldResponseScope.from_dict(obj["scope"]) if obj.get("scope") is not None else None, "createdBy": User.from_dict(obj["createdBy"]) if obj.get("createdBy") is not None else None, + "lastModifiedBy": ( + User.from_dict(obj["lastModifiedBy"]) if obj.get("lastModifiedBy") is not None else None + ), "createdAt": obj.get("createdAt"), "lastModifiedAt": obj.get("lastModifiedAt"), } diff --git a/packages/miro-api-python/miro_api/models/paginated_case_export_jobs_response.py b/packages/miro-api-python/miro_api/models/paginated_case_export_jobs_response.py new file mode 100644 index 000000000..0897ae6d3 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/paginated_case_export_jobs_response.py @@ -0,0 +1,135 @@ +# 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_extensions import Annotated +from miro_api.models.paginated_case_export_jobs_response_data_inner import PaginatedCaseExportJobsResponseDataInner +from typing import Optional, Set +from typing_extensions import Self + + +class PaginatedCaseExportJobsResponse(BaseModel): + """ + Board export job for a case. + """ # noqa: E501 + + 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. ", + ) + 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.", + ) + limit: Optional[Annotated[int, Field(le=100, strict=True, ge=1)]] = Field( + default=100, + description="The maximum number of results to return per call. If the number of project in the response is greater than the limit specified, the response returns the cursor parameter with a value.", + ) + type: Optional[StrictStr] = Field( + default="cursor-list", description="Type of the response, in this case it's always 'cursor-list'." + ) + data: Optional[List[PaginatedCaseExportJobsResponseDataInner]] = None + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["size", "cursor", "limit", "type", "data"] + + 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 PaginatedCaseExportJobsResponse 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 PaginatedCaseExportJobsResponse from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "size": obj.get("size"), + "cursor": obj.get("cursor"), + "limit": obj.get("limit") if obj.get("limit") is not None else 100, + "type": obj.get("type") if obj.get("type") is not None else "cursor-list", + "data": ( + [PaginatedCaseExportJobsResponseDataInner.from_dict(_item) for _item in obj["data"]] + if obj.get("data") 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/paginated_case_export_jobs_response_data_inner.py b/packages/miro-api-python/miro_api/models/paginated_case_export_jobs_response_data_inner.py new file mode 100644 index 000000000..1623d40e0 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/paginated_case_export_jobs_response_data_inner.py @@ -0,0 +1,99 @@ +# 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 PaginatedCaseExportJobsResponseDataInner(BaseModel): + """ + Board export job. + """ # noqa: E501 + + id: Optional[StrictStr] = Field(default=None, description="Unique identifier of the board export job.") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["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 PaginatedCaseExportJobsResponseDataInner 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 PaginatedCaseExportJobsResponseDataInner 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")}) + # 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/relationship.py b/packages/miro-api-python/miro_api/models/relationship.py new file mode 100644 index 000000000..0ccf65ef7 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/relationship.py @@ -0,0 +1,112 @@ +# 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 Relationship(BaseModel): + """ + Object that contains information about a related board item for the current item. + """ # noqa: E501 + + type: Optional[StrictStr] = Field( + default=None, + description="Indicates the relationship of this item with the current item. For example, if `type` returns `parent`, this means that related item is a parent for the current item.", + ) + item_type: Optional[StrictStr] = Field( + default=None, + description="Indicates the type of the related board item. For example, if `itemType` returns `widget`, this means that related item is a widget.", + alias="itemType", + ) + item_id: Optional[StrictStr] = Field( + default=None, description="Unique identifier of the related board item.", alias="itemId" + ) + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["type", "itemType", "itemId"] + + 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 Relationship 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 Relationship 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"), "itemType": obj.get("itemType"), "itemId": obj.get("itemId")} + ) + # 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/team_group.py b/packages/miro-api-python/miro_api/models/team_group.py new file mode 100644 index 000000000..a12ec95e8 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/team_group.py @@ -0,0 +1,114 @@ +# 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, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + + +class TeamGroup(BaseModel): + """ + TeamGroup + """ # noqa: E501 + + id: StrictStr = Field(description="User group ID.") + role: StrictStr = Field(description="Role of the user group in the team.") + type: Optional[StrictStr] = Field(default="team-user-group", description="Object type") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["id", "role", "type"] + + @field_validator("role") + def role_validate_enum(cls, value): + """Validates the enum""" + if value not in set(["member"]): + raise ValueError("must be one of enum values ('member')") + return value + + 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 TeamGroup 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 TeamGroup 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"), + "role": obj.get("role") if obj.get("role") is not None else "member", + "type": obj.get("type") if obj.get("type") is not None else "team-user-group", + } + ) + # 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/team_groups_page.py b/packages/miro-api-python/miro_api/models/team_groups_page.py new file mode 100644 index 000000000..3edd910cc --- /dev/null +++ b/packages/miro-api-python/miro_api/models/team_groups_page.py @@ -0,0 +1,127 @@ +# 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_extensions import Annotated +from miro_api.models.team_group import TeamGroup +from typing import Optional, Set +from typing_extensions import Self + + +class TeamGroupsPage(BaseModel): + """ + Page of groups that match the search query. + """ # noqa: E501 + + limit: 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 in the response is greater than the limit specified, the response returns the cursor parameter with a value." + ) + size: Annotated[int, Field(le=100, strict=True, ge=0)] = Field( + 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: List[TeamGroup] = Field(description="List of groups.") + 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 TeamGroupsPage 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 TeamGroupsPage 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") if obj.get("limit") is not None else 100, + "size": obj.get("size") if obj.get("size") is not None else 100, + "data": [TeamGroup.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/team_member.py b/packages/miro-api-python/miro_api/models/team_member.py index 1d4e406db..bd0b951ed 100644 --- a/packages/miro-api-python/miro_api/models/team_member.py +++ b/packages/miro-api-python/miro_api/models/team_member.py @@ -31,7 +31,7 @@ class TeamMember(BaseModel): id: StrictStr = Field(description="Team member id.") role: StrictStr = Field( - description=' Role of the team member. * "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": Team-guest user, user with access only to a team without access to organization. ' + description=' Role of the team member. * "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. ' ) created_at: Optional[datetime] = Field( default=None, description="Date and time when member was invited to the team.", alias="createdAt" @@ -62,8 +62,8 @@ class TeamMember(BaseModel): @field_validator("role") def role_validate_enum(cls, value): """Validates the enum""" - if value not in set(["non_team", "member", "admin", "team_guest"]): - raise ValueError("must be one of enum values ('non_team', 'member', 'admin', 'team_guest')") + if value not in set(["non_team", "member", "admin"]): + raise ValueError("must be one of enum values ('non_team', 'member', 'admin')") return value model_config = { diff --git a/packages/miro-api-python/miro_api/models/team_member_changes.py b/packages/miro-api-python/miro_api/models/team_member_changes.py index a3ac3530c..79e6eadfe 100644 --- a/packages/miro-api-python/miro_api/models/team_member_changes.py +++ b/packages/miro-api-python/miro_api/models/team_member_changes.py @@ -30,7 +30,7 @@ class TeamMemberChanges(BaseModel): role: Optional[StrictStr] = Field( default=None, - description=' Role of the team member. * "member": Team member with full member permissions. * "admin": Admin of a team. Team member with permission to manage team. * "team_guest": Team-guest user, user with access only to a team without access to organization. ', + description=' Role of the team member. * "member": Team member with full member permissions. * "admin": Admin of a team. Team member with permission to manage team. ', ) additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["role"] @@ -41,8 +41,8 @@ def role_validate_enum(cls, value): if value is None: return value - if value not in set(["member", "admin", "team_guest"]): - raise ValueError("must be one of enum values ('member', 'admin', 'team_guest')") + if value not in set(["member", "admin"]): + raise ValueError("must be one of enum values ('member', 'admin')") return value model_config = { diff --git a/packages/miro-api-python/miro_api/models/team_member_invite.py b/packages/miro-api-python/miro_api/models/team_member_invite.py index 0194604db..34e585a81 100644 --- a/packages/miro-api-python/miro_api/models/team_member_invite.py +++ b/packages/miro-api-python/miro_api/models/team_member_invite.py @@ -31,7 +31,7 @@ class TeamMemberInvite(BaseModel): email: StrictStr = Field(description="User email to add to a team") role: Optional[StrictStr] = Field( default=None, - description=' Role of the team member. * "member": Team member with full member permissions. * "admin": Admin of a team. Team member with permission to manage team. * "team_guest": Team-guest user, user with access only to a team without access to organization. ', + description=' Role of the team member. * "member": Team member with full member permissions. * "admin": Admin of a team. Team member with permission to manage team. ', ) additional_properties: Dict[str, Any] = {} __properties: ClassVar[List[str]] = ["email", "role"] @@ -42,8 +42,8 @@ def role_validate_enum(cls, value): if value is None: return value - if value not in set(["member", "admin", "team_guest"]): - raise ValueError("must be one of enum values ('member', 'admin', 'team_guest')") + if value not in set(["member", "admin"]): + raise ValueError("must be one of enum values ('member', 'admin')") return value model_config = { diff --git a/packages/miro-api-python/miro_api/models/team_sharing_policy_settings.py b/packages/miro-api-python/miro_api/models/team_sharing_policy_settings.py index dbb96170c..bcbf6911f 100644 --- a/packages/miro-api-python/miro_api/models/team_sharing_policy_settings.py +++ b/packages/miro-api-python/miro_api/models/team_sharing_policy_settings.py @@ -63,7 +63,7 @@ class TeamSharingPolicySettings(BaseModel): ) restrict_allowed_domains: Optional[StrictStr] = Field( default=None, - description=' * "enabled": Enabled. Restrict to listed domain. * "disabled": Disabled. No domain restriction. * "enabled_with_external_users_access": Enabled. Restrict to listed domain but allows external users to access. ', + description=' * "enabled": Enabled. Restrict to listed domain. * "disabled": Disabled. No domain restriction. * "enabled_with_external_user_access": Enabled. Restrict to listed domain but allows external users to access. ', alias="restrictAllowedDomains", ) sharing_on_account: Optional[StrictStr] = Field( diff --git a/packages/miro-api-python/miro_api/models/team_sharing_policy_settings_changes.py b/packages/miro-api-python/miro_api/models/team_sharing_policy_settings_changes.py index c38ec4155..7d47bc6f5 100644 --- a/packages/miro-api-python/miro_api/models/team_sharing_policy_settings_changes.py +++ b/packages/miro-api-python/miro_api/models/team_sharing_policy_settings_changes.py @@ -63,7 +63,7 @@ class TeamSharingPolicySettingsChanges(BaseModel): ) restrict_allowed_domains: Optional[StrictStr] = Field( default=None, - description=' * "enabled": Enabled. Restrict to listed domain. * "disabled": Disabled. No domain restriction. * "enabled_with_external_users_access": Enabled. Restrict to listed domain but allows external users to access. ', + description=' * "enabled": Enabled. Restrict to listed domain. * "disabled": Disabled. No domain restriction. * "enabled_with_external_user_access": Enabled. Restrict to listed domain but allows external users to access. ', alias="restrictAllowedDomains", ) sharing_on_account: Optional[StrictStr] = Field( diff --git a/packages/miro-api-python/miro_api/models/update_group_request.py b/packages/miro-api-python/miro_api/models/update_group_request.py new file mode 100644 index 000000000..d7279e811 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/update_group_request.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 +from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated +from typing import Optional, Set +from typing_extensions import Self + + +class UpdateGroupRequest(BaseModel): + """ + UpdateGroupRequest + """ # noqa: E501 + + name: Optional[Annotated[str, Field(min_length=1, strict=True, max_length=60)]] = Field( + default=None, description="New name for the user group being updated." + ) + description: Optional[Annotated[str, Field(min_length=0, strict=True, max_length=300)]] = Field( + default=None, description="New description of the user group." + ) + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["name", "description"] + + 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 UpdateGroupRequest 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 UpdateGroupRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"name": obj.get("name"), "description": obj.get("description")}) + # 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 new file mode 100644 index 000000000..9741bad63 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/update_user_group_members_request.py @@ -0,0 +1,106 @@ +# 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 UpdateUserGroupMembersRequest(BaseModel): + """ + UpdateUserGroupMembersRequest + """ # noqa: E501 + + members_to_add: Optional[List[StrictStr]] = Field( + default=None, description="List of user emails 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" + ) + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["membersToAdd", "membersToRemove"] + + 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 UpdateUserGroupMembersRequest 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 UpdateUserGroupMembersRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + {"membersToAdd": obj.get("membersToAdd"), "membersToRemove": obj.get("membersToRemove")} + ) + # 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_result_error.py b/packages/miro-api-python/miro_api/models/update_user_group_members_result_error.py new file mode 100644 index 000000000..2ede078db --- /dev/null +++ b/packages/miro-api-python/miro_api/models/update_user_group_members_result_error.py @@ -0,0 +1,116 @@ +# 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 +from typing import Any, ClassVar, Dict, List, Optional +from miro_api.models.update_user_group_members_result_error_error import UpdateUserGroupMembersResultErrorError +from miro_api.models.update_user_group_members_result_operation import UpdateUserGroupMembersResultOperation +from typing import Optional, Set +from typing_extensions import Self + + +class UpdateUserGroupMembersResultError(BaseModel): + """ + UpdateUserGroupMembersResultError + """ # noqa: E501 + + operation: Optional[UpdateUserGroupMembersResultOperation] = None + status: Optional[StrictInt] = Field(default=None, description="The HTTP status code for the successful operation.") + error: Optional[UpdateUserGroupMembersResultErrorError] = None + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["operation", "status", "error"] + + 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 UpdateUserGroupMembersResultError 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 error + if self.error: + _dict["error"] = self.error.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 UpdateUserGroupMembersResultError from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "operation": obj.get("operation"), + "status": obj.get("status"), + "error": ( + UpdateUserGroupMembersResultErrorError.from_dict(obj["error"]) + if obj.get("error") 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_result_error_error.py b/packages/miro-api-python/miro_api/models/update_user_group_members_result_error_error.py new file mode 100644 index 000000000..8fd2dffdb --- /dev/null +++ b/packages/miro-api-python/miro_api/models/update_user_group_members_result_error_error.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, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + + +class UpdateUserGroupMembersResultErrorError(BaseModel): + """ + UpdateUserGroupMembersResultErrorError + """ # noqa: E501 + + status: Optional[Any] = None + code: Optional[Any] = None + message: Optional[StrictStr] = Field(default=None, description="Explanation for the error") + type: Optional[StrictStr] = Field(default="error", description="Type of the object returned.") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["status", "code", "message", "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 UpdateUserGroupMembersResultErrorError 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 + + # set to None if status (nullable) is None + # and model_fields_set contains the field + if self.status is None and "status" in self.model_fields_set: + _dict["status"] = None + + # set to None if code (nullable) is None + # and model_fields_set contains the field + if self.code is None and "code" in self.model_fields_set: + _dict["code"] = None + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of UpdateUserGroupMembersResultErrorError from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "status": obj.get("status"), + "code": obj.get("code"), + "message": obj.get("message"), + "type": obj.get("type") if obj.get("type") is not None else "error", + } + ) + # 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_result_inner.py b/packages/miro-api-python/miro_api/models/update_user_group_members_result_inner.py new file mode 100644 index 000000000..66477c7b0 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/update_user_group_members_result_inner.py @@ -0,0 +1,156 @@ +# 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 json +import pprint +from pydantic import BaseModel, Field, StrictStr, ValidationError, field_validator +from typing import Any, List, Optional +from miro_api.models.update_user_group_members_result_error import UpdateUserGroupMembersResultError +from miro_api.models.update_user_group_members_result_success import UpdateUserGroupMembersResultSuccess +from pydantic import StrictStr, Field +from typing import Union, List, Optional, Dict +from typing_extensions import Literal, Self + +UPDATEUSERGROUPMEMBERSRESULTINNER_ONE_OF_SCHEMAS = [ + "UpdateUserGroupMembersResultError", + "UpdateUserGroupMembersResultSuccess", +] + + +class UpdateUserGroupMembersResultInner(BaseModel): + """ + UpdateUserGroupMembersResultInner + """ + + # data type: UpdateUserGroupMembersResultSuccess + oneof_schema_1_validator: Optional[UpdateUserGroupMembersResultSuccess] = None + # data type: UpdateUserGroupMembersResultError + oneof_schema_2_validator: Optional[UpdateUserGroupMembersResultError] = None + actual_instance: Optional[Union[UpdateUserGroupMembersResultError, UpdateUserGroupMembersResultSuccess]] = None + one_of_schemas: List[str] = Field( + default=Literal["UpdateUserGroupMembersResultError", "UpdateUserGroupMembersResultSuccess"] + ) + + model_config = { + "validate_assignment": True, + "protected_namespaces": (), + } + + def __init__(self, *args, **kwargs) -> None: + if args: + if len(args) > 1: + raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") + if kwargs: + raise ValueError("If a position argument is used, keyword arguments cannot be used.") + super().__init__(actual_instance=args[0]) + else: + super().__init__(**kwargs) + + def __getattr__(self, attr: str): + return getattr(self.actual_instance, attr) + + @field_validator("actual_instance") + def actual_instance_must_validate_oneof(cls, v): + instance = UpdateUserGroupMembersResultInner.model_construct() + error_messages = [] + match = 0 + # validate data type: UpdateUserGroupMembersResultSuccess + if not isinstance(v, UpdateUserGroupMembersResultSuccess): + error_messages.append(f"Error! Input type `{type(v)}` is not `UpdateUserGroupMembersResultSuccess`") + else: + match += 1 + # validate data type: UpdateUserGroupMembersResultError + if not isinstance(v, UpdateUserGroupMembersResultError): + error_messages.append(f"Error! Input type `{type(v)}` is not `UpdateUserGroupMembersResultError`") + else: + match += 1 + if match > 1: + # more than 1 match + raise ValueError( + "Multiple matches found when setting `actual_instance` in UpdateUserGroupMembersResultInner with oneOf schemas: UpdateUserGroupMembersResultError, UpdateUserGroupMembersResultSuccess. Details: " + + ", ".join(error_messages) + ) + elif match == 0: + # no match + raise ValueError( + "No match found when setting `actual_instance` in UpdateUserGroupMembersResultInner with oneOf schemas: UpdateUserGroupMembersResultError, UpdateUserGroupMembersResultSuccess. Details: " + + ", ".join(error_messages) + ) + else: + return v + + @classmethod + def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: + return cls.from_json(json.dumps(obj)) + + @classmethod + def from_json(cls, json_str: str) -> Union[UpdateUserGroupMembersResultError, UpdateUserGroupMembersResultSuccess]: + """Returns the object represented by the json string""" + instance = cls.model_construct() + error_messages = [] + matches = [] + + # deserialize data into UpdateUserGroupMembersResultSuccess + try: + instance.actual_instance = UpdateUserGroupMembersResultSuccess.from_json(json_str) + matches.append(instance.actual_instance) + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # deserialize data into UpdateUserGroupMembersResultError + try: + instance.actual_instance = UpdateUserGroupMembersResultError.from_json(json_str) + matches.append(instance.actual_instance) + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + + if not matches: + # no match + raise ValueError( + "No match found when deserializing the JSON string into UpdateUserGroupMembersResultInner with oneOf schemas: UpdateUserGroupMembersResultError, UpdateUserGroupMembersResultSuccess. Details: " + + ", ".join(error_messages) + ) + + # Return one match that has least additional_properties + if len(matches) > 1: + instance.actual_instance = sorted(matches, key=lambda m: len(m.additional_properties))[0] + + return instance + + def to_json(self) -> str: + """Returns the JSON representation of the actual instance""" + if self.actual_instance is None: + return "null" + + if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): + return self.actual_instance.to_json() + else: + return json.dumps(self.actual_instance) + + def to_dict( + self, + ) -> Optional[Union[Dict[str, Any], UpdateUserGroupMembersResultError, UpdateUserGroupMembersResultSuccess]]: + """Returns the dict representation of the actual instance""" + if self.actual_instance is None: + return None + + if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): + return self.actual_instance.to_dict() + else: + # primitive type + return self.actual_instance + + def to_str(self) -> str: + """Returns the string representation of the actual instance""" + return pprint.pformat(self.model_dump()) diff --git a/packages/miro-api-python/miro_api/models/update_user_group_members_result_operation.py b/packages/miro-api-python/miro_api/models/update_user_group_members_result_operation.py new file mode 100644 index 000000000..0f943a079 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/update_user_group_members_result_operation.py @@ -0,0 +1,35 @@ +# 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 json +from enum import Enum +from typing_extensions import Self + + +class UpdateUserGroupMembersResultOperation(str, Enum): + """ + The name of the operation that was performed. + """ + + """ + allowed enum values + """ + ADDMEMBERS = "addMembers" + REMOVEMEMBERS = "removeMembers" + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of UpdateUserGroupMembersResultOperation from a JSON string""" + return cls(json.loads(json_str)) 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 new file mode 100644 index 000000000..fa0beacc7 --- /dev/null +++ b/packages/miro-api-python/miro_api/models/update_user_group_members_result_success.py @@ -0,0 +1,120 @@ +# 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 +from typing import Any, ClassVar, Dict, List, Optional +from miro_api.models.group_member import GroupMember +from miro_api.models.update_user_group_members_result_operation import UpdateUserGroupMembersResultOperation +from typing import Optional, Set +from typing_extensions import Self + + +class UpdateUserGroupMembersResultSuccess(BaseModel): + """ + UpdateUserGroupMembersResultSuccess + """ # noqa: E501 + + operation: Optional[UpdateUserGroupMembersResultOperation] = None + status: Optional[StrictInt] = Field(default=None, description="The HTTP status code for the successful operation.") + affected_users: Optional[List[GroupMember]] = Field(default=None, alias="affectedUsers") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["operation", "status", "affectedUsers"] + + 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 UpdateUserGroupMembersResultSuccess 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 affected_users (list) + _items = [] + if self.affected_users: + for _item in self.affected_users: + if _item: + _items.append(_item.to_dict()) + _dict["affectedUsers"] = _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 UpdateUserGroupMembersResultSuccess from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "operation": obj.get("operation"), + "status": obj.get("status"), + "affectedUsers": ( + [GroupMember.from_dict(_item) for _item in obj["affectedUsers"]] + if obj.get("affectedUsers") 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/.openapi-generator/FILES b/packages/miro-api/.openapi-generator/FILES index e0735f87d..f4ff4d195 100644 --- a/packages/miro-api/.openapi-generator/FILES +++ b/packages/miro-api/.openapi-generator/FILES @@ -19,15 +19,23 @@ model/auditOrganization.ts model/auditPage.ts model/auditTeam.ts model/basicError.ts -model/basicErrorEnterpriseUserSessionResetEnterprisePlan.ts model/basicErrorOrganizationsEnterprisePlan.ts model/board.ts model/boardChanges.ts model/boardDataClassificationLabel.ts +model/boardExportJob.ts +model/boardExportJobCreator.ts model/boardExportJobId.ts model/boardExportJobStatus.ts +model/boardExportJobTasksCount.ts +model/boardExportJobTasksList.ts +model/boardExportJobsList.ts model/boardExportResult.ts +model/boardExportTask.ts +model/boardExportTaskBoard.ts +model/boardExportTaskExportLink.ts model/boardExportTaskResult.ts +model/boardFormat.ts model/boardItemContentLog.ts model/boardLinks.ts model/boardMember.ts @@ -43,6 +51,8 @@ model/boardSharingPolicy.ts model/boardSharingPolicyChange.ts model/boardSubscription.ts model/boardSubscriptionData.ts +model/boardUserGroup.ts +model/boardUserGroupsPage.ts model/boardWithLinks.ts model/boardWithLinksAndLastOpened.ts model/boardWithLinksAndWithoutProject.ts @@ -68,9 +78,13 @@ model/connectorsCursorPaged.ts model/copyBoardChanges.ts model/createBoardExportRequest.ts model/createBoardSubscriptionRequest.ts +model/createBoardUserGroupsRequest.ts model/createDocumentItemUsingFileFromDeviceRequestData.ts model/createFrameItem400Response.ts +model/createGroupMemberRequest.ts +model/createGroupRequest.ts model/createProjectRequest.ts +model/createTeamGroupRequest.ts model/createTeamRequest.ts model/createdBy.ts model/createdByPlatformContainers.ts @@ -105,6 +119,9 @@ model/embedUrlData.ts model/embedUrlDataChanges.ts model/embedUrlDataPlatformbulkcreateoperation.ts model/enterpriseGetOrganizationMembers200Response.ts +model/enterpriseUpdateBoardExportJob200Response.ts +model/enterpriseUpdateBoardExportJob200ResponseStatus.ts +model/enterpriseUpdateBoardExportJobRequest.ts model/error400.ts model/error401.ts model/error403.ts @@ -112,6 +129,7 @@ model/error404.ts model/error409.ts model/error429.ts model/errorResponse.ts +model/exportJobStatus.ts model/fixedRatioGeometry.ts model/fixedRatioGeometryPlatformFileUpload.ts model/fixedRatioNoRotationGeometry.ts @@ -154,7 +172,12 @@ model/getTagsFromItem400Response.ts model/getTagsResponse.ts model/group.ts model/groupData.ts +model/groupMember.ts +model/groupMembersPage.ts model/groupResponseShort.ts +model/groupTeam.ts +model/groupTeamsPage.ts +model/groupsPage.ts model/imageCreateRequest.ts model/imageData.ts model/imageDataResponse.ts @@ -217,6 +240,8 @@ model/organizationMember.ts model/organizationMembersSearchResponse.ts model/pageLinks.ts model/pageLinksPlatformExperimentalFeatures.ts +model/paginatedCaseExportJobsResponse.ts +model/paginatedCaseExportJobsResponseDataInner.ts model/paginatedCaseResponse.ts model/paginatedLegalHoldContentItemsResponse.ts model/paginatedLegalHoldResponse.ts @@ -236,6 +261,7 @@ model/projectPage.ts model/projectRole.ts model/projectRoleToAdd.ts model/projectSettings.ts +model/relationship.ts model/relativeOffset.ts model/revokeTokenRequest.ts model/selfLink.ts @@ -275,6 +301,8 @@ model/teamCollaborationSettings.ts model/teamCollaborationSettingsChanges.ts model/teamCopyAccessLevelSettings.ts model/teamCopyAccessLevelSettingsChanges.ts +model/teamGroup.ts +model/teamGroupsPage.ts model/teamInformation.ts model/teamInvitationSettings.ts model/teamInvitationSettingsChanges.ts @@ -306,6 +334,7 @@ model/updateCardStyle.ts model/updateConnectorStyle.ts model/updateFrameItem409Response.ts model/updateFrameStyle.ts +model/updateGroupRequest.ts model/updateProjectMemberRequest.ts model/updateProjectRequest.ts model/updateProjectSettingsRequest.ts @@ -313,6 +342,12 @@ model/updateShapeStyle.ts model/updateStickyNoteStyle.ts model/updateTeamSettingsRequest.ts model/updateTextStyle.ts +model/updateUserGroupMembersRequest.ts +model/updateUserGroupMembersResultError.ts +model/updateUserGroupMembersResultErrorError.ts +model/updateUserGroupMembersResultInner.ts +model/updateUserGroupMembersResultOperation.ts +model/updateUserGroupMembersResultSuccess.ts model/uploadFileFromDeviceData.ts model/user.ts model/userInfoLastOpenedBy.ts diff --git a/packages/miro-api/api/apis.ts b/packages/miro-api/api/apis.ts index 4d6af9923..3feac2f00 100644 --- a/packages/miro-api/api/apis.ts +++ b/packages/miro-api/api/apis.ts @@ -27,8 +27,13 @@ import {GetBoardItemContentLogsResponse} from '../model/getBoardItemContentLogsR import {BoardExportJobId} from '../model/boardExportJobId' import {BoardExportJobStatus} from '../model/boardExportJobStatus' +import {BoardExportJobTasksList} from '../model/boardExportJobTasksList' +import {BoardExportJobsList} from '../model/boardExportJobsList' import {BoardExportResult} from '../model/boardExportResult' +import {BoardExportTaskExportLink} from '../model/boardExportTaskExportLink' import {CreateBoardExportRequest} from '../model/createBoardExportRequest' +import {EnterpriseUpdateBoardExportJob200Response} from '../model/enterpriseUpdateBoardExportJob200Response' +import {EnterpriseUpdateBoardExportJobRequest} from '../model/enterpriseUpdateBoardExportJobRequest' import {BoardMemberChanges} from '../model/boardMemberChanges' import {BoardMemberWithLinks} from '../model/boardMemberWithLinks' @@ -95,8 +100,11 @@ import {ImageUpdateRequest} from '../model/imageUpdateRequest' import {GenericItemUpdate} from '../model/genericItemUpdate' +import {CaseRequest} from '../model/caseRequest' import {CaseResponse} from '../model/caseResponse' +import {LegalHoldRequest} from '../model/legalHoldRequest' import {LegalHoldResponse} from '../model/legalHoldResponse' +import {PaginatedCaseExportJobsResponse} from '../model/paginatedCaseExportJobsResponse' import {PaginatedCaseResponse} from '../model/paginatedCaseResponse' import {PaginatedLegalHoldContentItemsResponse} from '../model/paginatedLegalHoldContentItemsResponse' import {PaginatedLegalHoldResponse} from '../model/paginatedLegalHoldResponse' @@ -132,6 +140,10 @@ import {Project} from '../model/project' import {ProjectPage} from '../model/projectPage' import {UpdateProjectRequest} from '../model/updateProjectRequest' +import {BoardUserGroup} from '../model/boardUserGroup' +import {BoardUserGroupsPage} from '../model/boardUserGroupsPage' +import {CreateBoardUserGroupsRequest} from '../model/createBoardUserGroupsRequest' + import {StickyNoteCreateRequest} from '../model/stickyNoteCreateRequest' import {StickyNoteItem} from '../model/stickyNoteItem' import {StickyNoteUpdateRequest} from '../model/stickyNoteUpdateRequest' @@ -152,6 +164,10 @@ import {TeamMembersPage} from '../model/teamMembersPage' import {TeamSettings} from '../model/teamSettings' import {TeamSettingsChanges} from '../model/teamSettingsChanges' +import {CreateTeamGroupRequest} from '../model/createTeamGroupRequest' +import {TeamGroup} from '../model/teamGroup' +import {TeamGroupsPage} from '../model/teamGroupsPage' + import {CreateTeamRequest} from '../model/createTeamRequest' import {Team} from '../model/team' import {TeamChanges} from '../model/teamChanges' @@ -163,11 +179,18 @@ import {TextUpdateRequest} from '../model/textUpdateRequest' import {TokenInformation} from '../model/tokenInformation' -import {BoardSubscription} from '../model/boardSubscription' -import {CreateBoardSubscriptionRequest} from '../model/createBoardSubscriptionRequest' -import {GenericSubscription} from '../model/genericSubscription' -import {GenericSubscriptionsCursorPaged} from '../model/genericSubscriptionsCursorPaged' -import {UpdateBoardSubscriptionRequest} from '../model/updateBoardSubscriptionRequest' +import {CreateGroupMemberRequest} from '../model/createGroupMemberRequest' +import {GroupMember} from '../model/groupMember' +import {GroupMembersPage} from '../model/groupMembersPage' +import {UpdateUserGroupMembersRequest} from '../model/updateUserGroupMembersRequest' +import {UpdateUserGroupMembersResultInner} from '../model/updateUserGroupMembersResultInner' + +import {GroupTeam} from '../model/groupTeam' +import {GroupTeamsPage} from '../model/groupTeamsPage' + +import {CreateGroupRequest} from '../model/createGroupRequest' +import {GroupsPage} from '../model/groupsPage' +import {UpdateGroupRequest} from '../model/updateGroupRequest' import {ObjectSerializer, RequestFile} from '../model/models' @@ -194,7 +217,7 @@ export class MiroApi { } /** - * Adds an app card item to a board.

Required scope

boards:write

Rate limiting

Level 2
+ * Adds an app card item to a board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Create app card item * @param boardId Unique identifier (ID) of the board where you want to create the item. * @param appCardCreateRequest @@ -231,7 +254,7 @@ export class MiroApi { } /** - * Deletes an app card item from a board.

Required scope

boards:write

Rate limiting

Level 3
+ * Deletes an app card item from a board.

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete app card item * @param boardId Unique identifier (ID) of the board from which you want to delete an item. * @param itemId Unique identifier (ID) of the item that you want to delete. @@ -268,7 +291,7 @@ export class MiroApi { } /** - * Retrieves information for a specific app card item on a board.

Required scope

boards:read

Rate limiting

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

Required scope

boards:read

Rate limiting

Level 1
* @summary Get app card 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. @@ -305,7 +328,7 @@ export class MiroApi { } /** - * 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 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
* @summary Update app card 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. @@ -347,7 +370,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Get app metrics * @param appId ID of the app to get metrics for. * @param startDate Start date of the period in UTC format. For example, 2024-12-31. @@ -412,7 +435,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Get total app metrics * @param appId ID of the app to get total metrics for. */ @@ -445,7 +468,7 @@ export class MiroApi { } /** - * 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 + * 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 * @summary Get audit logs * @param createdAfter 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.<br>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)).\" * @param createdBefore 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.<br>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)). @@ -515,7 +538,7 @@ export class MiroApi { } /** - * 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 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.

* @summary Get board classification * @param orgId id of the organization * @param teamId id of the team @@ -568,7 +591,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary Update board classification * @param orgId id of the organization * @param teamId id of the team @@ -623,7 +646,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary Get organization settings * @param orgId id of the organization */ @@ -660,7 +683,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary Bulk update boards classification * @param orgId id of the organization * @param teamId id of the team @@ -711,7 +734,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary Get team settings * @param orgId id of the organization * @param teamId id of the team @@ -755,7 +778,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary Update team settings * @param orgId id of the organization * @param teamId id of the team @@ -801,7 +824,7 @@ export class MiroApi { } /** - * 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 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.

* @summary Retrieve content change logs of board items * @param orgId Unique identifier of the organization. * @param 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)). @@ -896,7 +919,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary Get results for board export job * @param orgId Unique identifier of the organization. * @param jobId Unique identifier of the job. @@ -936,7 +959,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary Get board export job status * @param orgId Unique identifier of the organization. * @param jobId Unique identifier of the board export job. @@ -976,7 +999,133 @@ export class MiroApi { } /** - * 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 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.

+ * @summary Get board export job tasks list (Beta) + * @param orgId Unique identifier of the organization. + * @param jobId Unique identifier of the board export job. + * @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. + * @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 tasks in the response is greater than the limit specified, the response returns the cursor parameter with a value. + */ + async enterpriseBoardExportJobTasks( + orgId: string, + jobId: string, + query?: { + status?: Array + + cursor?: string + + limit?: number + }, + ): Promise<{response: Response; body: BoardExportJobTasksList}> { + const localVarPath = '/v2/orgs/{org_id}/boards/export/jobs/{job_id}/tasks' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'job_id' + '}', encodeURIComponent(String(jobId))) + 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 enterpriseBoardExportJobTasks.') + } + // verify required parameter 'jobId' is not null or undefined + if (jobId === null || jobId === undefined) { + throw new Error('Required parameter jobId was null or undefined when calling enterpriseBoardExportJobTasks.') + } + + if (query?.status !== undefined) { + localVarQueryParameters.append('status', ObjectSerializer.serialize(query?.status, 'Array')) + } + + if (query?.cursor !== undefined) { + localVarQueryParameters.append('cursor', ObjectSerializer.serialize(query?.cursor, 'string')) + } + + if (query?.limit !== undefined) { + localVarQueryParameters.append('limit', ObjectSerializer.serialize(query?.limit, '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, 'BoardExportJobTasksList') + + return {response, body} + } + + /** + * 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.

+ * @summary Get board export jobs list (Beta) + * @param orgId Unique identifier of the organization. + * @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. + * @param creatorId Unique identifier of the board export job creator. + * @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 jobs in the response is greater than the limit specified, the response returns the cursor parameter with a value. + */ + async enterpriseBoardExportJobs( + orgId: string, + query?: { + status?: Array + + creatorId?: Array + + cursor?: string + + limit?: number + }, + ): Promise<{response: Response; body: BoardExportJobsList}> { + const localVarPath = '/v2/orgs/{org_id}/boards/export/jobs'.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 enterpriseBoardExportJobs.') + } + + if (query?.status !== undefined) { + localVarQueryParameters.append('status', ObjectSerializer.serialize(query?.status, 'Array')) + } + + if (query?.creatorId !== undefined) { + localVarQueryParameters.append('creatorId', ObjectSerializer.serialize(query?.creatorId, 'Array')) + } + + if (query?.cursor !== undefined) { + localVarQueryParameters.append('cursor', ObjectSerializer.serialize(query?.cursor, 'string')) + } + + if (query?.limit !== undefined) { + localVarQueryParameters.append('limit', ObjectSerializer.serialize(query?.limit, '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, 'BoardExportJobsList') + + return {response, body} + } + + /** + * 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.

* @summary Create board export job * @param orgId Unique identifier of the organization. * @param requestId Unique identifier of the board export job. @@ -1024,7 +1173,105 @@ export class MiroApi { } /** - * Retrieves a pageable list of members for a board.

Required scope

boards:read

Rate limiting

Level 1
+ * 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.

+ * @summary Create task export link (Beta) + * @param orgId Unique identifier of the organization. + * @param jobId Unique identifier of the board export job. + * @param taskId Unique identifier of the board export task. + */ + async enterpriseCreateBoardExportTaskExportLink( + orgId: string, + jobId: string, + taskId: string, + ): Promise<{response: Response; body: BoardExportTaskExportLink}> { + const localVarPath = '/v2/orgs/{org_id}/boards/export/jobs/{job_id}/tasks/{task_id}/export-link' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'job_id' + '}', encodeURIComponent(String(jobId))) + .replace('{' + 'task_id' + '}', encodeURIComponent(String(taskId))) + 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 enterpriseCreateBoardExportTaskExportLink.', + ) + } + // verify required parameter 'jobId' is not null or undefined + if (jobId === null || jobId === undefined) { + throw new Error( + 'Required parameter jobId was null or undefined when calling enterpriseCreateBoardExportTaskExportLink.', + ) + } + // verify required parameter 'taskId' is not null or undefined + if (taskId === null || taskId === undefined) { + throw new Error( + 'Required parameter taskId was null or undefined when calling enterpriseCreateBoardExportTaskExportLink.', + ) + } + + 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, 'BoardExportTaskExportLink') + + return {response, body} + } + + /** + * 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.

+ * @summary Update board export job status (Beta) + * @param orgId Unique identifier of the organization. + * @param jobId Unique identifier of the board export job. + * @param enterpriseUpdateBoardExportJobRequest + */ + async enterpriseUpdateBoardExportJob( + orgId: string, + jobId: string, + + enterpriseUpdateBoardExportJobRequest?: EnterpriseUpdateBoardExportJobRequest, + ): Promise<{response: Response; body: EnterpriseUpdateBoardExportJob200Response}> { + const localVarPath = '/v2/orgs/{org_id}/boards/export/jobs/{job_id}/status' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'job_id' + '}', encodeURIComponent(String(jobId))) + 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 enterpriseUpdateBoardExportJob.') + } + // verify required parameter 'jobId' is not null or undefined + if (jobId === null || jobId === undefined) { + throw new Error('Required parameter jobId was null or undefined when calling enterpriseUpdateBoardExportJob.') + } + + 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, + 'PUT', + urlResource, + JSON.stringify( + ObjectSerializer.serialize(enterpriseUpdateBoardExportJobRequest, 'EnterpriseUpdateBoardExportJobRequest'), + ), + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'EnterpriseUpdateBoardExportJob200Response') + + return {response, body} + } + + /** + * Retrieves a pageable list of members for a board.

Required scope

boards:read

Rate limiting

Level 1
* @summary Get all board members * @param boardId Unique identifier (ID) of the board to which the board member belongs. * @param limit @@ -1074,7 +1321,7 @@ export class MiroApi { } /** - * Retrieves information for a board member.

Required scope

boards:read

Rate limiting

Level 1
+ * Retrieves information for a board member.

Required scope

boards:read

Rate limiting

Level 1
* @summary Get specific board member * @param boardId Unique identifier (ID) of the board to which the board member belongs. * @param boardMemberId Unique identifier (ID) of the board member whose role you want to retrieve. @@ -1114,7 +1361,7 @@ export class MiroApi { } /** - * Removes a board member from 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
* @summary Remove board member * @param boardId Unique identifier (ID) of the board from which you want to delete an item. * @param boardMemberId Unique identifier (ID) of the board member whose role you want to delete. @@ -1151,7 +1398,7 @@ export class MiroApi { } /** - * 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 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
* @summary Share board * @param boardId Unique identifier (ID) of the board to which the board member belongs. * @param boardMembersInvite @@ -1188,7 +1435,7 @@ export class MiroApi { } /** - * Updates the role of a board member.

Required scope

boards:write

Rate limiting

Level 2
+ * Updates the role of a board member.

Required scope

boards:write

Rate limiting

Level 2
* @summary Update board member * @param boardId Unique identifier (ID) of the board for which you want to update the role of the board member. * @param boardMemberId Unique identifier (ID) of the board member whose role you want to update. @@ -1230,7 +1477,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Copy board * @param copyFrom Unique identifier (ID) of the board that you want to copy. * @param copyBoardChanges @@ -1270,7 +1517,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Create board * @param boardChanges */ @@ -1296,7 +1543,7 @@ export class MiroApi { } /** - * 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 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
* @summary Delete board * @param boardId Unique identifier (ID) of the board that you want to delete. */ @@ -1326,7 +1573,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. 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 @@ -1406,7 +1653,7 @@ export class MiroApi { } /** - * Retrieves information about a board.

Required scope

boards:read

Rate limiting

Level 1
+ * Retrieves information about a board.

Required scope

boards:read

Rate limiting

Level 1
* @summary Get specific board * @param boardId Unique identifier (ID) of the board that you want to retrieve. */ @@ -1436,7 +1683,7 @@ export class MiroApi { } /** - * Updates a specific board.

Required scope

boards:write

Rate limiting

Level 2
+ * Updates a specific board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Update board * @param boardId Unique identifier (ID) of the board that you want to update. * @param boardChanges @@ -1467,7 +1714,7 @@ export class MiroApi { } /** - * 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. + * 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. * @summary Create items in bulk * @param boardId Unique identifier (ID) of the board where you want to create the item. * @param itemCreate @@ -1501,7 +1748,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Create items in bulk using file from device * @param boardId Unique identifier (ID) of the board where you want to create the item. * @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). @@ -1561,7 +1808,7 @@ export class MiroApi { } /** - * Adds a card item to a board

Required scope

boards:write

Rate limiting

Level 2
+ * Adds a card item to a board

Required scope

boards:write

Rate limiting

Level 2
* @summary Create card item * @param boardId Unique identifier (ID) of the board where you want to create the item. * @param cardCreateRequest @@ -1598,7 +1845,7 @@ export class MiroApi { } /** - * Deletes a card item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ * Deletes a card item from the board.

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete card 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. @@ -1635,7 +1882,7 @@ export class MiroApi { } /** - * Retrieves information for a specific card item on a board

Required scope

boards:read

Rate limiting

Level 1
+ * Retrieves information for a specific card item on a board

Required scope

boards:read

Rate limiting

Level 1
* @summary Get card 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. @@ -1672,7 +1919,7 @@ export class MiroApi { } /** - * 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 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
* @summary Update card 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. @@ -1714,7 +1961,7 @@ export class MiroApi { } /** - * Adds a connector to a board.

Required scope

boards:write

Rate limiting

Level 2
+ * 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 @@ -1751,7 +1998,7 @@ export class MiroApi { } /** - * Deletes the specified connector 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
* @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. @@ -1788,7 +2035,7 @@ export class MiroApi { } /** - * Retrieves information for a specific connector 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
* @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. @@ -1825,7 +2072,7 @@ export class MiroApi { } /** - * 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
+ * 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 @@ -1875,7 +2122,7 @@ export class MiroApi { } /** - * 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
+ * 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. @@ -1917,7 +2164,7 @@ export class MiroApi { } /** - * Adds a document item to a board by selecting file from device.

Required scope

boards:write

Rate limiting

Level 2
+ * 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. @@ -1976,7 +2223,7 @@ 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
+ * 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 @@ -2013,7 +2260,7 @@ export class MiroApi { } /** - * Deletes a document item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ * 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. @@ -2050,7 +2297,7 @@ export class MiroApi { } /** - * Retrieves information for a specific document item on a board

Required scope

boards:read

Rate limiting

Level 1
+ * 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. @@ -2087,7 +2334,7 @@ export class MiroApi { } /** - * Updates a document item on a board by using file from a device.

Required scope

boards:write

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
* @summary Update document item using file from device * @param boardIdPlatformFileUpload 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. @@ -2150,7 +2397,7 @@ export class MiroApi { } /** - * Updates a document item on a board

Required scope

boards:write

Rate limiting

Level 2
+ * 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. @@ -2192,7 +2439,7 @@ export class MiroApi { } /** - * Adds an embed item containing external content to a board.

Required scope

boards:write

Rate limiting

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

Required scope

boards:write

Rate limiting

Level 2
* @summary Create embed item * @param boardId Unique identifier (ID) of the board where you want to create the item. * @param embedCreateRequest @@ -2229,7 +2476,7 @@ export class MiroApi { } /** - * Deletes an embed item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ * Deletes an embed item from the board.

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete embed 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. @@ -2266,7 +2513,7 @@ export class MiroApi { } /** - * Retrieves information for a specific embed item on a board.

Required scope

boards:read

Rate limiting

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

Required scope

boards:read

Rate limiting

Level 1
* @summary Get embed 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. @@ -2303,7 +2550,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Update embed 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. @@ -2345,7 +2592,7 @@ export class MiroApi { } /** - * Adds a flowchart shape item to a board.

Required scope

boards:write

Rate limiting

Level 2
+ * Adds a flowchart shape item to a board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Create shape item * @param boardId Unique identifier (ID) of the board where you want to create the item. * @param shapeCreateRequest @@ -2382,7 +2629,7 @@ export class MiroApi { } /** - * Deletes a flowchart shape item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ * Deletes a flowchart shape item from the board.

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete shape 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. @@ -2419,7 +2666,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Get items on board * @param boardId Unique identifier (ID) of the board for which you want to retrieve the list of available items. * @param limit @@ -2476,7 +2723,7 @@ export class MiroApi { } /** - * Retrieves information for a specific shape 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
* @summary Get shape 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. @@ -2513,7 +2760,7 @@ export class MiroApi { } /** - * Retrieves information for a specific item on a board.

Required scope

boards:read

Rate limiting

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

Required scope

boards:read

Rate limiting

Level 1
* @summary Get specific item on board * @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. @@ -2550,7 +2797,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Update shape 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. @@ -2592,7 +2839,7 @@ export class MiroApi { } /** - * Adds a frame to a board.

Required scope

boards:write

Rate limiting

Level 2
+ * Adds a frame to a board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Create frame * @param boardId Unique identifier (ID) of the board where you want to create a frame. * @param frameCreateRequest @@ -2629,7 +2876,7 @@ export class MiroApi { } /** - * Deletes a frame from a board.

Required scope

boards:write

Rate limiting

Level 3
+ * Deletes a frame from a board.

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete frame * @param boardId Unique identifier (ID) of the board from which you want to delete the frame. * @param itemId Unique identifier (ID) of the frame that you want to delete. @@ -2666,7 +2913,7 @@ export class MiroApi { } /** - * Retrieves information for a specific frame on a board.

Required scope

boards:read

Rate limiting

Level 1
+ * Retrieves information for a specific frame on a board.

Required scope

boards:read

Rate limiting

Level 1
* @summary Get frame * @param boardId Unique identifier (ID) of the board that contains the frame that you want to retrieve * @param itemId Unique identifier (ID) of the frame that you want to retrieve. @@ -2703,7 +2950,7 @@ export class MiroApi { } /** - * 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 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
* @summary Update frame * @param boardId Unique identifier (ID) of the board where you want to update the frame. * @param itemId Unique identifier (ID) of the frame that you want to update. @@ -2745,7 +2992,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Create group * @param boardId * @param group @@ -2779,7 +3026,7 @@ export class MiroApi { } /** - * Deletes a group from a board. All the items in the groups are deleted along with the group.

Required scope

boards:write

Rate limiting

Level 3
+ * 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
* @summary Deletes the group * @param boardId Unique identifier (ID) of the board. * @param groupId Unique identifier (ID) of the group. @@ -2830,7 +3077,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Get all groups on a board * @param boardId Unique identifier (ID) of the board. * @param limit The maximum number of items to return at one time, default is 10, maximum is 50. @@ -2880,7 +3127,7 @@ export class MiroApi { } /** - * Returns a list of items in a specific group.

Required scope

boards:read

Rate limiting

Level 2 per item ID + * Returns a list of items in a specific group.

Required scope

boards:read

Rate limiting

Level 2 per item ID * @summary Get a group by its ID * @param boardId Unique identifier (ID) of the board. * @param groupId Unique identifier (ID) of the group. @@ -2917,7 +3164,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Get items of a group by ID * @param boardId Unique identifier (ID) of the board. * @param groupItemId The ID of the group item to retrieve. @@ -2978,7 +3225,7 @@ export class MiroApi { } /** - * Ungroups items from a group.

Required scope

boards:write

Rate limiting

Level 3
+ * Ungroups items from a group.

Required scope

boards:write

Rate limiting

Level 3
* @summary Ungroup items * @param boardId Unique identifier (ID) of the board. * @param groupId Unique identifier (ID) of the group. @@ -3026,7 +3273,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Updates a group with new items * @param boardId Unique identifier (ID) of the board. * @param groupId Unique identifier (ID) of the group. @@ -3068,7 +3315,7 @@ export class MiroApi { } /** - * Adds an image item to a board by specifying a file from device.

Required scope

boards:write

Rate limiting

Level 2
+ * 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. @@ -3124,7 +3371,7 @@ export class MiroApi { } /** - * Adds an image item to a board by specifying an image URL.

Required scope

boards:write

Rate limiting

Level 2
+ * 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 * @param boardId Unique identifier (ID) of the board where you want to create the item. * @param imageCreateRequest @@ -3161,7 +3408,7 @@ export class MiroApi { } /** - * Deletes an image item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ * Deletes an image item from the board.

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete image 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. @@ -3198,7 +3445,7 @@ export class MiroApi { } /** - * Retrieves information for a specific image item on a board.

Required scope

boards:read

Rate limiting

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

Required scope

boards:read

Rate limiting

Level 1
* @summary Get image 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. @@ -3235,7 +3482,7 @@ export class MiroApi { } /** - * Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
+ * Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Update image item using file from device * @param boardIdPlatformFileUpload 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. @@ -3298,7 +3545,7 @@ export class MiroApi { } /** - * Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
+ * 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. @@ -3340,7 +3587,7 @@ export class MiroApi { } /** - * Deletes an item from a board.

Required scope

boards:write

Rate limiting

Level 3
+ * Deletes an item from a board.

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete 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. @@ -3377,7 +3624,7 @@ export class MiroApi { } /** - * Deletes an item from a board.

Required scope

boards:write

Rate limiting

Level 3
+ * Deletes an item from a board.

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete 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. @@ -3414,7 +3661,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Get items on board * @param boardId Unique identifier (ID) of the board for which you want to retrieve the list of available items. * @param limit @@ -3437,6 +3684,8 @@ export class MiroApi { | 'preview' | 'frame' | 'embed' + | 'doc_format' + | 'data_table_format' cursor?: string }, @@ -3460,7 +3709,7 @@ export class MiroApi { 'type', ObjectSerializer.serialize( query?.type, - "'text' | 'shape' | 'sticky_note' | 'image' | 'document' | 'card' | 'app_card' | 'preview' | 'frame' | 'embed'", + "'text' | 'shape' | 'sticky_note' | 'image' | 'document' | 'card' | 'app_card' | 'preview' | 'frame' | 'embed' | 'doc_format' | 'data_table_format'", ), ) } @@ -3487,7 +3736,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Get items within frame * @param boardIdPlatformContainers Unique identifier (ID) of the board that contains the frame for which you want to retrieve the list of available items. * @param parentItemId ID of the frame for which you want to retrieve the list of available items. @@ -3557,7 +3806,7 @@ export class MiroApi { } /** - * Retrieves information for a specific item on a board.

Required scope

boards:read

Rate limiting

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

Required scope

boards:read

Rate limiting

Level 1
* @summary Get specific item on board * @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. @@ -3594,7 +3843,7 @@ export class MiroApi { } /** - * Updates the position or the parent of an item on a board.

Required scope

boards:write

Rate limiting

Level 2
+ * Updates the position or the parent of an item on a board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Update item position or parent * @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. @@ -3636,37 +3885,17 @@ export class MiroApi { } /** - * 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. - * @summary Get all cases - * @param limit The maximum number of items in the result list. - * @param orgId The ID of the organization for which you want to retrieve the list of cases. - * @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. + * 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. + * @summary Create case + * @param orgId The ID of the organization in which you want to create a new case. + * @param caseRequest */ - async getAllCases( - limit: number, - orgId: string, - query?: { - cursor?: string - }, - ): Promise<{response: Response; body: PaginatedCaseResponse}> { + async createCase(orgId: string, caseRequest: CaseRequest): Promise<{response: Response; body: CaseResponse}> { const localVarPath = '/v2/orgs/{org_id}/cases'.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 getAllCases.') - } - - // verify required parameter 'limit' is not null or undefined - if (limit === null || limit === undefined) { - throw new Error('Required parameter limit was null or undefined when calling getAllCases.') - } - - if (limit !== undefined) { - localVarQueryParameters.append('limit', ObjectSerializer.serialize(limit, 'number')) - } - - if (query?.cursor !== undefined) { - localVarQueryParameters.append('cursor', ObjectSerializer.serialize(query?.cursor, 'string')) + throw new Error('Required parameter orgId was null or undefined when calling createCase.') } const urlResource = new URL(localVarPath, this.basePath) @@ -3674,58 +3903,41 @@ 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(caseRequest, 'CaseRequest')), this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'PaginatedCaseResponse') + const body = ObjectSerializer.deserialize(bodyAsJson, 'CaseResponse') return {response, body} } /** - * 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. - * @summary Get all legal holds within a case - * @param limit The maximum number of items in the result list. - * @param orgId The ID of the organization for which you want to retrieve the list of legal holds within a case. - * @param caseId The ID of the case for which you want to retrieve the list of legal holds. - * @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. + * 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. + * @summary Create legal hold + * @param orgId The ID of the organization in which you want to create a new legal hold. + * @param caseId The ID of the case in which you want to create a new legal hold. + * @param legalHoldRequest */ - async getAllLegalHolds( - limit: number, + async createLegalHold( orgId: string, caseId: string, - query?: { - cursor?: string - }, - ): Promise<{response: Response; body: PaginatedLegalHoldResponse}> { + legalHoldRequest: LegalHoldRequest, + ): Promise<{response: Response; body: LegalHoldResponse}> { const localVarPath = '/v2/orgs/{org_id}/cases/{case_id}/legal-holds' .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) .replace('{' + 'case_id' + '}', encodeURIComponent(String(caseId))) 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 getAllLegalHolds.') + throw new Error('Required parameter orgId was null or undefined when calling createLegalHold.') } // verify required parameter 'caseId' is not null or undefined if (caseId === null || caseId === undefined) { - throw new Error('Required parameter caseId was null or undefined when calling getAllLegalHolds.') - } - - // verify required parameter 'limit' is not null or undefined - if (limit === null || limit === undefined) { - throw new Error('Required parameter limit was null or undefined when calling getAllLegalHolds.') - } - - if (limit !== undefined) { - localVarQueryParameters.append('limit', ObjectSerializer.serialize(limit, 'number')) - } - - if (query?.cursor !== undefined) { - localVarQueryParameters.append('cursor', ObjectSerializer.serialize(query?.cursor, 'string')) + throw new Error('Required parameter caseId was null or undefined when calling createLegalHold.') } const urlResource = new URL(localVarPath, this.basePath) @@ -3733,36 +3945,36 @@ 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(legalHoldRequest, 'LegalHoldRequest')), this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'PaginatedLegalHoldResponse') + const body = ObjectSerializer.deserialize(bodyAsJson, 'LegalHoldResponse') return {response, body} } /** - * 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. - * @summary Get case - * @param orgId The ID of the organization for which you want to retrieve the case information. - * @param caseId The ID of the case you want to retrieve. + * 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. + * @summary Close case + * @param orgId The ID of the organization in which you want to close a case. + * @param caseId The ID of the case you want to close. */ - async getCase(orgId: string, caseId: string): Promise<{response: Response; body: CaseResponse}> { + async deleteCase(orgId: string, caseId: string): Promise<{response: Response; body?: any}> { const localVarPath = '/v2/orgs/{org_id}/cases/{case_id}' .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) .replace('{' + 'case_id' + '}', encodeURIComponent(String(caseId))) 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 getCase.') + throw new Error('Required parameter orgId was null or undefined when calling deleteCase.') } // verify required parameter 'caseId' is not null or undefined if (caseId === null || caseId === undefined) { - throw new Error('Required parameter caseId was null or undefined when calling getCase.') + throw new Error('Required parameter caseId was null or undefined when calling deleteCase.') } const urlResource = new URL(localVarPath, this.basePath) @@ -3770,30 +3982,26 @@ export class MiroApi { 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, 'CaseResponse') + const body = bodyAsJson return {response, body} } /** - * 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. - * @summary Get legal hold information - * @param orgId The ID of the organization for which you want to retrieve the legal hold information. - * @param caseId The ID of the case for which you want to retrieve the legal hold information. - * @param legalHoldId The ID of the legal hold you want to retrieve. + * 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. + * @summary Close legal hold + * @param orgId The ID of the organization in which you want to close a legal hold. + * @param caseId The ID of the case in which you want to close a legal hold. + * @param legalHoldId The ID of the legal hold you want to close. */ - async getLegalHold( - orgId: string, - caseId: string, - legalHoldId: string, - ): Promise<{response: Response; body: LegalHoldResponse}> { + async deleteLegalHold(orgId: string, caseId: string, legalHoldId: string): Promise<{response: Response; body?: any}> { const localVarPath = '/v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}' .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) .replace('{' + 'case_id' + '}', encodeURIComponent(String(caseId))) @@ -3801,15 +4009,15 @@ export class MiroApi { 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 getLegalHold.') + throw new Error('Required parameter orgId was null or undefined when calling deleteLegalHold.') } // verify required parameter 'caseId' is not null or undefined if (caseId === null || caseId === undefined) { - throw new Error('Required parameter caseId was null or undefined when calling getLegalHold.') + throw new Error('Required parameter caseId was null or undefined when calling deleteLegalHold.') } // verify required parameter 'legalHoldId' is not null or undefined if (legalHoldId === null || legalHoldId === undefined) { - throw new Error('Required parameter legalHoldId was null or undefined when calling getLegalHold.') + throw new Error('Required parameter legalHoldId was null or undefined when calling deleteLegalHold.') } const urlResource = new URL(localVarPath, this.basePath) @@ -3817,33 +4025,311 @@ export class MiroApi { 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, 'LegalHoldResponse') + const body = bodyAsJson return {response, body} } /** - * 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. - * @summary Get content items under legal hold - * @param orgId The ID of the organization for which you want to retrieve the list of content items under hold. - * @param caseId The ID of the case for which you want to retrieve the list of content items under hold. - * @param legalHoldId The ID of the legal hold for which you want to retrieve the list of content items under hold. - * @param limit The maximum number of items in the result list. + * 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. + * @summary Edit case + * @param orgId The ID of the organization for which you want to edit the case information. + * @param caseId The ID of the case you want to edit. + * @param caseRequest + */ + async editCase( + orgId: string, + caseId: string, + caseRequest: CaseRequest, + ): Promise<{response: Response; body: CaseResponse}> { + const localVarPath = '/v2/orgs/{org_id}/cases/{case_id}' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'case_id' + '}', encodeURIComponent(String(caseId))) + 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 editCase.') + } + // verify required parameter 'caseId' is not null or undefined + if (caseId === null || caseId === undefined) { + throw new Error('Required parameter caseId was null or undefined when calling editCase.') + } + + 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, + 'PUT', + urlResource, + JSON.stringify(ObjectSerializer.serialize(caseRequest, 'CaseRequest')), + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'CaseResponse') + + return {response, body} + } + + /** + * 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. + * @summary Edit legal hold + * @param orgId The ID of the organization for which you want to edit the legal hold information. + * @param caseId The ID of the case for which you want to edit the legal hold information. + * @param legalHoldId The ID of the legal hold you want to edit. + * @param legalHoldRequest + */ + async editLegalHold( + orgId: string, + caseId: string, + legalHoldId: string, + legalHoldRequest: LegalHoldRequest, + ): Promise<{response: Response; body: LegalHoldResponse}> { + const localVarPath = '/v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'case_id' + '}', encodeURIComponent(String(caseId))) + .replace('{' + 'legal_hold_id' + '}', encodeURIComponent(String(legalHoldId))) + 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 editLegalHold.') + } + // verify required parameter 'caseId' is not null or undefined + if (caseId === null || caseId === undefined) { + throw new Error('Required parameter caseId was null or undefined when calling editLegalHold.') + } + // verify required parameter 'legalHoldId' is not null or undefined + if (legalHoldId === null || legalHoldId === undefined) { + throw new Error('Required parameter legalHoldId was null or undefined when calling editLegalHold.') + } + + 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, + 'PUT', + urlResource, + JSON.stringify(ObjectSerializer.serialize(legalHoldRequest, 'LegalHoldRequest')), + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'LegalHoldResponse') + + return {response, body} + } + + /** + * 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. + * @summary Get all cases + * @param orgId The ID of the organization for which you want to retrieve the list of cases. + * @param limit The maximum number of items in the result list. + * @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. + */ + async getAllCases( + orgId: string, + query?: { + limit?: number + + cursor?: string + }, + ): Promise<{response: Response; body: PaginatedCaseResponse}> { + const localVarPath = '/v2/orgs/{org_id}/cases'.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 getAllCases.') + } + + if (query?.limit !== undefined) { + localVarQueryParameters.append('limit', ObjectSerializer.serialize(query?.limit, 'number')) + } + + 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, 'PaginatedCaseResponse') + + return {response, body} + } + + /** + * 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. + * @summary Get all legal holds within a case + * @param orgId The ID of the organization for which you want to retrieve the list of legal holds within a case. + * @param caseId The ID of the case for which you want to retrieve the list of legal holds. + * @param limit The maximum number of items in the result list. + * @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. + */ + async getAllLegalHolds( + orgId: string, + caseId: string, + query?: { + limit?: number + + cursor?: string + }, + ): Promise<{response: Response; body: PaginatedLegalHoldResponse}> { + const localVarPath = '/v2/orgs/{org_id}/cases/{case_id}/legal-holds' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'case_id' + '}', encodeURIComponent(String(caseId))) + 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 getAllLegalHolds.') + } + // verify required parameter 'caseId' is not null or undefined + if (caseId === null || caseId === undefined) { + throw new Error('Required parameter caseId was null or undefined when calling getAllLegalHolds.') + } + + if (query?.limit !== undefined) { + localVarQueryParameters.append('limit', ObjectSerializer.serialize(query?.limit, 'number')) + } + + 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, 'PaginatedLegalHoldResponse') + + return {response, body} + } + + /** + * 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. + * @summary Get case + * @param orgId The ID of the organization for which you want to retrieve the case information. + * @param caseId The ID of the case you want to retrieve. + */ + async getCase(orgId: string, caseId: string): Promise<{response: Response; body: CaseResponse}> { + const localVarPath = '/v2/orgs/{org_id}/cases/{case_id}' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'case_id' + '}', encodeURIComponent(String(caseId))) + 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 getCase.') + } + // verify required parameter 'caseId' is not null or undefined + if (caseId === null || caseId === undefined) { + throw new Error('Required parameter caseId was null or undefined when calling getCase.') + } + + 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, 'CaseResponse') + + return {response, body} + } + + /** + * 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. + * @summary Get legal hold information + * @param orgId The ID of the organization for which you want to retrieve the legal hold information. + * @param caseId The ID of the case for which you want to retrieve the legal hold information. + * @param legalHoldId The ID of the legal hold you want to retrieve. + */ + async getLegalHold( + orgId: string, + caseId: string, + legalHoldId: string, + ): Promise<{response: Response; body: LegalHoldResponse}> { + const localVarPath = '/v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'case_id' + '}', encodeURIComponent(String(caseId))) + .replace('{' + 'legal_hold_id' + '}', encodeURIComponent(String(legalHoldId))) + 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 getLegalHold.') + } + // verify required parameter 'caseId' is not null or undefined + if (caseId === null || caseId === undefined) { + throw new Error('Required parameter caseId was null or undefined when calling getLegalHold.') + } + // verify required parameter 'legalHoldId' is not null or undefined + if (legalHoldId === null || legalHoldId === undefined) { + throw new Error('Required parameter legalHoldId was null or undefined when calling getLegalHold.') + } + + 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, 'LegalHoldResponse') + + return {response, body} + } + + /** + * 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. + * @summary Get content items under legal hold + * @param orgId The ID of the organization for which you want to retrieve the list of content items under hold. + * @param caseId The ID of the case for which you want to retrieve the list of content items under hold. + * @param legalHoldId The ID of the legal hold for which you want to retrieve the list of content items under hold. + * @param limit The maximum number of items in the result list. * @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. */ async getLegalHoldContentItems( orgId: string, caseId: string, legalHoldId: string, - limit: number, query?: { + limit?: number + cursor?: string }, ): Promise<{response: Response; body: PaginatedLegalHoldContentItemsResponse}> { @@ -3865,13 +4351,63 @@ export class MiroApi { throw new Error('Required parameter legalHoldId was null or undefined when calling getLegalHoldContentItems.') } - // verify required parameter 'limit' is not null or undefined - if (limit === null || limit === undefined) { - throw new Error('Required parameter limit was null or undefined when calling getLegalHoldContentItems.') + if (query?.limit !== undefined) { + localVarQueryParameters.append('limit', ObjectSerializer.serialize(query?.limit, 'number')) } - if (limit !== undefined) { - localVarQueryParameters.append('limit', ObjectSerializer.serialize(limit, 'number')) + 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, 'PaginatedLegalHoldContentItemsResponse') + + return {response, body} + } + + /** + * 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. + * @summary Get board export jobs of a case (Beta) + * @param orgId The ID of the organization for which you want to retrieve the list of export jobs within a case. + * @param caseId The ID of the case for which you want to retrieve the list of export jobs. + * @param limit The maximum number of items in the result list. + * @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. + */ + async getLegalHoldExportJobs( + orgId: string, + caseId: string, + query?: { + limit?: number + + cursor?: string + }, + ): Promise<{response: Response; body: PaginatedCaseExportJobsResponse}> { + const localVarPath = '/v2/orgs/{org_id}/cases/{case_id}/export-jobs' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'case_id' + '}', encodeURIComponent(String(caseId))) + 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 getLegalHoldExportJobs.') + } + // verify required parameter 'caseId' is not null or undefined + if (caseId === null || caseId === undefined) { + throw new Error('Required parameter caseId was null or undefined when calling getLegalHoldExportJobs.') + } + + if (query?.limit !== undefined) { + localVarQueryParameters.append('limit', ObjectSerializer.serialize(query?.limit, 'number')) } if (query?.cursor !== undefined) { @@ -3890,13 +4426,13 @@ export class MiroApi { this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'PaginatedLegalHoldContentItemsResponse') + const body = ObjectSerializer.deserialize(bodyAsJson, 'PaginatedCaseExportJobsResponse') return {response, body} } /** - * 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 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. * @summary Create mind map node * @param boardId Unique identifier (ID) of the board where you want to create the item. * @param mindmapCreateRequest @@ -3933,7 +4469,7 @@ export class MiroApi { } /** - * Deletes a mind map node item and its child nodes from the board.

Required scope

boards:write

Rate limiting

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

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete mind map node * @param boardId Unique identifier (ID) of the board from which you want to delete the mind map node. * @param itemId Unique identifier (ID) of the mind map node that you want to delete. @@ -3970,7 +4506,7 @@ export class MiroApi { } /** - * Retrieves information for a specific mind map node on a board.

Required scope

boards:read

Rate limiting

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

Required scope

boards:read

Rate limiting

Level 1
* @summary Get specific mind map node * @param boardId Unique identifier (ID) of the board from which you want to retrieve a mind map node. * @param itemId Unique identifier (ID) of the mind map node that you want to retrieve. @@ -4007,7 +4543,7 @@ export class MiroApi { } /** - * 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 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
* @summary Get mind map nodes * @param boardId Unique identifier (ID) of the board from which you want to retrieve mind map nodes. * @param limit Maximum number of results returned @@ -4083,7 +4619,7 @@ export class MiroApi { } /** - * 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.

+ * 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 * @param orgId id of the organization * @param memberId id of the organization member @@ -4123,7 +4659,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary Get organization members * @param orgId id of the organization * @param emails @@ -4215,7 +4751,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary Get organization info * @param orgId id of the organization */ @@ -4245,7 +4781,7 @@ export class MiroApi { } /** - * Add a Miro user to a project.

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.

+ * 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.

* @summary Add member in a project * @param orgId The ID of the organization to which the project belongs. * @param teamId The ID of the team to which the project belongs. @@ -4294,7 +4830,7 @@ export class MiroApi { } /** - * Remove a member from a project. The user remains in the team even after the member is removed from a project.

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.

+ * 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.

* @summary Remove project member * @param orgId The ID of the organization to which the project belongs. * @param teamId The ID of the team to which the project belongs. @@ -4348,7 +4884,7 @@ export class MiroApi { } /** - * Retrieves information for a specific project member.

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.

+ * 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.

* @summary Get project member * @param orgId The ID of the organization to which the project belongs. * @param teamId The ID of the team to which the project belongs. @@ -4402,7 +4938,7 @@ export class MiroApi { } /** - * Retrieves the list of members for a specific project.

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.

+ * 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.

* @summary List of project members * @param orgId The ID of the organization to which the project belongs. * @param teamId The ID of the team to which the project belongs. @@ -4464,7 +5000,7 @@ export class MiroApi { } /** - * Updates details of a project member, such as the member\'s role.

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.

+ * 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.

* @summary Update project member * @param orgId The ID of the organization to which the project member belongs. * @param teamId The ID of the team to which the project member belongs. @@ -4520,7 +5056,7 @@ export class MiroApi { } /** - * Retrieves the project settings.

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.

+ * 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.

* @summary Get project settings * @param orgId The ID of the organization to which the project belongs. * @param teamId The ID of the team to which the project belongs. @@ -4567,7 +5103,7 @@ export class MiroApi { } /** - * Updates the settings of a project.

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.

+ * 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.

* @summary Update project settings * @param orgId The ID of the organization to which the project belongs. * @param teamId The ID of the team to which the project belongs. @@ -4618,7 +5154,7 @@ export class MiroApi { } /** - * 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.

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.

+ * 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.

* @summary Create project * @param orgId The ID of the organization within which you you want to create a project. * @param teamId The ID of the team within which you you want to create a project. @@ -4660,7 +5196,7 @@ export class MiroApi { } /** - * Deletes a project. After a project is deleted, all boards and users that belong to the project remain in the team.

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.

+ * 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.

* @summary Delete project * @param orgId The ID of the organization from which you want to delete a project. * @param teamId The ID of the team from which you want to delete a project. @@ -4707,7 +5243,7 @@ export class MiroApi { } /** - * Retrieves project information, such as a name for an existing project.

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.

+ * 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.

* @summary Get project * @param orgId The ID of the organization from which you want to retrieve the project information. * @param teamId The ID of the team from which you want to retrieve the project information. @@ -4754,7 +5290,7 @@ export class MiroApi { } /** - * 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).

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.

+ * 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.

* @summary List of projects * @param orgId The ID of the organization from which you want to retrieve the list of available projects. * @param teamId The ID of the team from which you want to retrieve the list of available projects. @@ -4809,7 +5345,7 @@ export class MiroApi { } /** - * Update information about a project, such as the project name.

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.

+ * 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.

* @summary Update project * @param orgId The ID of an Organization. * @param teamId The ID of a Team. @@ -4858,7 +5394,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary Reset all sessions of a user * @param email Email ID of the user whose sessions you want to reset. Note that this user will be signed out from all devices. */ @@ -4893,23 +5429,139 @@ export class MiroApi { } /** - * Adds a shape 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
* @summary Create shape item * @param boardId Unique identifier (ID) of the board where you want to create the item. * @param shapeCreateRequest */ - async createShapeItem( + async createShapeItem( + boardId: string, + shapeCreateRequest: ShapeCreateRequest, + ): Promise<{response: Response; body: ShapeItem}> { + const localVarPath = '/v2/boards/{board_id}/shapes'.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 createShapeItem.') + } + + 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, + JSON.stringify(ObjectSerializer.serialize(shapeCreateRequest, 'ShapeCreateRequest')), + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'ShapeItem') + + return {response, body} + } + + /** + * Deletes a shape item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ * @summary Delete shape 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 deleteShapeItem(boardId: string, itemId: string): Promise<{response: Response; body: object}> { + const localVarPath = '/v2/boards/{board_id}/shapes/{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 deleteShapeItem.') + } + // 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 deleteShapeItem.') + } + + 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 shape item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ * @summary Get shape 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 getShapeItem(boardId: string, itemId: string): Promise<{response: Response; body: ShapeItem}> { + const localVarPath = '/v2/boards/{board_id}/shapes/{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 getShapeItem.') + } + // 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 getShapeItem.') + } + + 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, 'ShapeItem') + + return {response, body} + } + + /** + * 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
+ * @summary Update shape 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 shapeUpdateRequest + */ + async updateShapeItem( boardId: string, - shapeCreateRequest: ShapeCreateRequest, + itemId: string, + shapeUpdateRequest: ShapeUpdateRequest, ): Promise<{response: Response; body: ShapeItem}> { - const localVarPath = '/v2/boards/{board_id}/shapes'.replace( - '{' + 'board_id' + '}', - encodeURIComponent(String(boardId)), - ) + const localVarPath = '/v2/boards/{board_id}/shapes/{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 createShapeItem.') + throw new Error('Required parameter boardId was null or undefined when calling updateShapeItem.') + } + // 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 updateShapeItem.') } const urlResource = new URL(localVarPath, this.basePath) @@ -4917,9 +5569,9 @@ export class MiroApi { const {response, bodyAsJson} = await makeJsonRequest( typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'POST', + 'PATCH', urlResource, - JSON.stringify(ObjectSerializer.serialize(shapeCreateRequest, 'ShapeCreateRequest')), + JSON.stringify(ObjectSerializer.serialize(shapeUpdateRequest, 'ShapeUpdateRequest')), this.logger, ) @@ -4930,23 +5582,28 @@ export class MiroApi { } /** - * Deletes a shape item from the board.

Required scope

boards:write

Rate limiting

Level 3
- * @summary Delete shape 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. + * Shares a board with user groups with a specified role.

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.

+ * @summary Create board user group assignments + * @param orgId The id of the Organization. + * @param boardId The ID of the board. + * @param createBoardUserGroupsRequest */ - async deleteShapeItem(boardId: string, itemId: string): Promise<{response: Response; body: object}> { - const localVarPath = '/v2/boards/{board_id}/shapes/{item_id}' + async enterpriseBoardsCreateGroup( + orgId: string, + boardId: string, + createBoardUserGroupsRequest: CreateBoardUserGroupsRequest, + ): Promise<{response: Response; body: BoardUserGroup}> { + const localVarPath = '/v2/orgs/{org_id}/boards/{board_id}/groups' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) - .replace('{' + 'item_id' + '}', encodeURIComponent(String(itemId))) 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 enterpriseBoardsCreateGroup.') + } // 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 deleteShapeItem.') - } - // 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 deleteShapeItem.') + throw new Error('Required parameter boardId was null or undefined when calling enterpriseBoardsCreateGroup.') } const urlResource = new URL(localVarPath, this.basePath) @@ -4954,36 +5611,46 @@ export class MiroApi { const {response, bodyAsJson} = await makeJsonRequest( typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'DELETE', + 'POST', urlResource, - undefined, + JSON.stringify(ObjectSerializer.serialize(createBoardUserGroupsRequest, 'CreateBoardUserGroupsRequest')), this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'object') + const body = ObjectSerializer.deserialize(bodyAsJson, 'BoardUserGroup') return {response, body} } /** - * Retrieves information for a specific shape item on a board.

Required scope

boards:read

Rate limiting

Level 1
- * @summary Get shape 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. + * 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.

+ * @summary Delete board user group assignment + * @param orgId The id of the Organization. + * @param boardId The ID of the board. + * @param groupId The ID of a user group. */ - async getShapeItem(boardId: string, itemId: string): Promise<{response: Response; body: ShapeItem}> { - const localVarPath = '/v2/boards/{board_id}/shapes/{item_id}' + async enterpriseBoardsDeleteGroups( + orgId: string, + boardId: string, + groupId: string, + ): Promise<{response: Response; body?: any}> { + const localVarPath = '/v2/orgs/{org_id}/boards/{board_id}/groups/{group_id}' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) - .replace('{' + 'item_id' + '}', encodeURIComponent(String(itemId))) + .replace('{' + 'group_id' + '}', encodeURIComponent(String(groupId))) 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 enterpriseBoardsDeleteGroups.') + } // 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 getShapeItem.') + throw new Error('Required parameter boardId was null or undefined when calling enterpriseBoardsDeleteGroups.') } - // 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 getShapeItem.') + // verify required parameter 'groupId' is not null or undefined + if (groupId === null || groupId === undefined) { + throw new Error('Required parameter groupId was null or undefined when calling enterpriseBoardsDeleteGroups.') } const urlResource = new URL(localVarPath, this.basePath) @@ -4991,41 +5658,54 @@ export class MiroApi { 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, 'ShapeItem') + const body = bodyAsJson return {response, body} } /** - * 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
- * @summary Update shape 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 shapeUpdateRequest + * 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.

+ * @summary Get board user group assignments + * @param orgId The id of the Organization. + * @param boardId The ID of the board. + * @param limit The maximum number of user groups in the result list. + * @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. */ - async updateShapeItem( + async enterpriseBoardsGetGroups( + orgId: string, boardId: string, - itemId: string, - shapeUpdateRequest: ShapeUpdateRequest, - ): Promise<{response: Response; body: ShapeItem}> { - const localVarPath = '/v2/boards/{board_id}/shapes/{item_id}' + query?: { + limit?: number + + cursor?: string + }, + ): Promise<{response: Response; body: BoardUserGroupsPage}> { + const localVarPath = '/v2/orgs/{org_id}/boards/{board_id}/groups' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) - .replace('{' + 'item_id' + '}', encodeURIComponent(String(itemId))) 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 enterpriseBoardsGetGroups.') + } // 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 updateShapeItem.') + throw new Error('Required parameter boardId was null or undefined when calling enterpriseBoardsGetGroups.') } - // 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 updateShapeItem.') + + if (query?.limit !== undefined) { + localVarQueryParameters.append('limit', ObjectSerializer.serialize(query?.limit, 'number')) + } + + if (query?.cursor !== undefined) { + localVarQueryParameters.append('cursor', ObjectSerializer.serialize(query?.cursor, 'string')) } const urlResource = new URL(localVarPath, this.basePath) @@ -5033,20 +5713,20 @@ export class MiroApi { const {response, bodyAsJson} = await makeJsonRequest( typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'PATCH', + 'GET', urlResource, - JSON.stringify(ObjectSerializer.serialize(shapeUpdateRequest, 'ShapeUpdateRequest')), + undefined, this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'ShapeItem') + const body = ObjectSerializer.deserialize(bodyAsJson, 'BoardUserGroupsPage') return {response, body} } /** - * Adds a sticky note item to a board.

Required scope

boards:write

Rate limiting

Level 2
+ * Adds a sticky note item to a board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Create sticky note item * @param boardId Unique identifier (ID) of the board where you want to create the item. * @param stickyNoteCreateRequest @@ -5083,7 +5763,7 @@ export class MiroApi { } /** - * Deletes a sticky note item from the board.

Required scope

boards:write

Rate limiting

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

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete sticky note 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. @@ -5120,7 +5800,7 @@ export class MiroApi { } /** - * Retrieves information for a specific sticky note item on a board.

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
* @summary Get sticky note 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. @@ -5157,7 +5837,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Update sticky note 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. @@ -5199,7 +5879,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Attach tag to item * @param boardIdPlatformTags Unique identifier (ID) of the board with the item that you want to add a tag to. * @param itemId Unique identifier (ID) of the item to which you want to add a tag. @@ -5250,7 +5930,7 @@ export class MiroApi { } /** - * Creates a tag on a board.

Required scope

boards:write

Rate limiting

Level 1
+ * Creates a tag on a board.

Required scope

boards:write

Rate limiting

Level 1
* @summary Create tag * @param boardId Unique identifier (ID) of the board where you want to create the tag. * @param tagCreateRequest @@ -5287,7 +5967,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Delete tag * @param boardId Unique identifier (ID) of the board where you want to delete a specific tag. * @param tagId Unique identifier (ID) of the tag that you want to delete. @@ -5324,7 +6004,7 @@ export class MiroApi { } /** - * Retrieves all the items that have the specified tag.

Required scope

boards:read

Rate limiting

Level 1
+ * Retrieves all the items that have the specified tag.

Required scope

boards:read

Rate limiting

Level 1
* @summary Get items by tag * @param boardIdPlatformTags Unique identifier (ID) of the board where you want to retrieve a specific tag. * @param tagId Unique identifier (ID) of the tag that you want to retrieve. @@ -5385,7 +6065,7 @@ export class MiroApi { } /** - * Retrieves information for a specific tag.

Required scope

boards:write

Rate limiting

Level 1
+ * Retrieves information for a specific tag.

Required scope

boards:write

Rate limiting

Level 1
* @summary Get tag * @param boardId Unique identifier (ID) of the board where you want to retrieve a specific tag. * @param tagId Unique identifier (ID) of the tag that you want to retrieve. @@ -5422,7 +6102,7 @@ export class MiroApi { } /** - * Retrieves all the tags from the specified 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
* @summary Get tags from board * @param boardId Unique identifier (ID) of the board whose tags you want to retrieve. * @param limit @@ -5472,7 +6152,7 @@ export class MiroApi { } /** - * Retrieves all the tags from the specified item.

Required scope

boards:read

Rate limiting

Level 1
+ * Retrieves all the tags from the specified item.

Required scope

boards:read

Rate limiting

Level 1
* @summary Get tags from item * @param boardId Unique identifier (ID) of the board with the item whose tags you want to retrieve. * @param itemId Unique identifier (ID) of the item whose tags you want to retrieve. @@ -5509,7 +6189,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Remove tag from item * @param boardIdPlatformTags Unique identifier (ID) of the board with the item that you want to remove a tag from. * @param itemId Unique identifier (ID) of the item that you want to remove the tag from. @@ -5560,7 +6240,7 @@ export class MiroApi { } /** - * 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
+ * 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
* @summary Update tag * @param boardId Unique identifier (ID) of the board where you want to update a specific tag. * @param tagId Unique identifier (ID) of the tag that you want to update. @@ -5602,7 +6282,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary Delete team member from team * @param orgId The id of the Organization. * @param teamId The id of the Team. @@ -5649,7 +6329,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary Get team member * @param orgId The id of the Organization. * @param teamId The id of the Team. @@ -5696,13 +6376,13 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary List team members * @param orgId The id of the Organization. * @param teamId The id of the Team. * @param limit * @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. - * @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\": Team-guest user, user with access only to a team without access to organization. + * @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. */ async enterpriseGetTeamMembers( orgId: string, @@ -5758,7 +6438,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary Invite team members * @param orgId The id of the Organization. * @param teamId The id of the Team. @@ -5800,7 +6480,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary Update team member * @param orgId The id of the Organization. * @param teamId The id of the Team. @@ -5849,7 +6529,7 @@ export class MiroApi { } /** - * 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 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.

* @summary Get default team settings * @param orgId The id of an Organization. */ @@ -5882,7 +6562,7 @@ export class MiroApi { } /** - * 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 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.

* @summary Get team settings * @param orgId The id of the Organization. * @param teamId The id of the Team. @@ -5919,7 +6599,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary Update team settings * @param orgId The id of the Organization. * @param teamId The id of the Team. @@ -5936,11 +6616,202 @@ export class MiroApi { 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 enterpriseUpdateTeamSettings.') + throw new Error('Required parameter orgId was null or undefined when calling enterpriseUpdateTeamSettings.') + } + // verify required parameter 'teamId' is not null or undefined + if (teamId === null || teamId === undefined) { + throw new Error('Required parameter teamId was null or undefined when calling enterpriseUpdateTeamSettings.') + } + + 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(teamSettingsChanges, 'TeamSettingsChanges')), + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'TeamSettings') + + return {response, body} + } + + /** + * 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.

\' + * @summary Create user group to team connection + * @param orgId The id of the Organization. + * @param teamId The id of the Team. + * @param createTeamGroupRequest + */ + async enterpriseTeamsCreateGroup( + orgId: string, + teamId: string, + createTeamGroupRequest: CreateTeamGroupRequest, + ): Promise<{response: Response; body: TeamGroup}> { + const localVarPath = '/v2/orgs/{org_id}/teams/{team_id}/groups' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'team_id' + '}', encodeURIComponent(String(teamId))) + 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 enterpriseTeamsCreateGroup.') + } + // verify required parameter 'teamId' is not null or undefined + if (teamId === null || teamId === undefined) { + throw new Error('Required parameter teamId was null or undefined when calling enterpriseTeamsCreateGroup.') + } + + 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, + JSON.stringify(ObjectSerializer.serialize(createTeamGroupRequest, 'CreateTeamGroupRequest')), + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'TeamGroup') + + return {response, body} + } + + /** + * 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.

+ * @summary Delete user group to team connection + * @param orgId The id of the Organization. + * @param teamId The id of the Team. + * @param groupId The ID of a user group. + */ + async enterpriseTeamsDeleteGroup( + orgId: string, + teamId: string, + groupId: string, + ): Promise<{response: Response; body?: any}> { + const localVarPath = '/v2/orgs/{org_id}/teams/{team_id}/groups/{group_id}' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'team_id' + '}', encodeURIComponent(String(teamId))) + .replace('{' + 'group_id' + '}', encodeURIComponent(String(groupId))) + 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 enterpriseTeamsDeleteGroup.') + } + // verify required parameter 'teamId' is not null or undefined + if (teamId === null || teamId === undefined) { + throw new Error('Required parameter teamId was null or undefined when calling enterpriseTeamsDeleteGroup.') + } + // verify required parameter 'groupId' is not null or undefined + if (groupId === null || groupId === undefined) { + throw new Error('Required parameter groupId was null or undefined when calling enterpriseTeamsDeleteGroup.') + } + + 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 = bodyAsJson + + return {response, body} + } + + /** + * 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.

+ * @summary Get user group of a team + * @param orgId The id of the Organization. + * @param teamId The id of the Team. + * @param groupId The ID of a user group. + */ + async enterpriseTeamsGetGroup( + orgId: string, + teamId: string, + groupId: string, + ): Promise<{response: Response; body: TeamGroup}> { + const localVarPath = '/v2/orgs/{org_id}/teams/{team_id}/groups/{group_id}' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'team_id' + '}', encodeURIComponent(String(teamId))) + .replace('{' + 'group_id' + '}', encodeURIComponent(String(groupId))) + 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 enterpriseTeamsGetGroup.') + } + // verify required parameter 'teamId' is not null or undefined + if (teamId === null || teamId === undefined) { + throw new Error('Required parameter teamId was null or undefined when calling enterpriseTeamsGetGroup.') + } + // verify required parameter 'groupId' is not null or undefined + if (groupId === null || groupId === undefined) { + throw new Error('Required parameter groupId was null or undefined when calling enterpriseTeamsGetGroup.') + } + + 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, 'TeamGroup') + + return {response, body} + } + + /** + * 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.

+ * @summary List of user group to team connections + * @param orgId The id of the Organization. + * @param teamId The id of the Team. + * @param limit The maximum number of user groups in the result list. + * @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. + */ + async enterpriseTeamsGetGroups( + orgId: string, + teamId: string, + query?: { + limit?: number + + cursor?: string + }, + ): Promise<{response: Response; body: TeamGroupsPage}> { + const localVarPath = '/v2/orgs/{org_id}/teams/{team_id}/groups' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'team_id' + '}', encodeURIComponent(String(teamId))) + 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 enterpriseTeamsGetGroups.') } // verify required parameter 'teamId' is not null or undefined if (teamId === null || teamId === undefined) { - throw new Error('Required parameter teamId was null or undefined when calling enterpriseUpdateTeamSettings.') + throw new Error('Required parameter teamId was null or undefined when calling enterpriseTeamsGetGroups.') + } + + if (query?.limit !== undefined) { + localVarQueryParameters.append('limit', ObjectSerializer.serialize(query?.limit, 'number')) + } + + if (query?.cursor !== undefined) { + localVarQueryParameters.append('cursor', ObjectSerializer.serialize(query?.cursor, 'string')) } const urlResource = new URL(localVarPath, this.basePath) @@ -5948,20 +6819,20 @@ export class MiroApi { const {response, bodyAsJson} = await makeJsonRequest( typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'PATCH', + 'GET', urlResource, - JSON.stringify(ObjectSerializer.serialize(teamSettingsChanges, 'TeamSettingsChanges')), + undefined, this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'TeamSettings') + const body = ObjectSerializer.deserialize(bodyAsJson, 'TeamGroupsPage') return {response, body} } /** - * 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.

+ * 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.

* @summary Create team * @param orgId The id of the Organization. * @param createTeamRequest @@ -5995,7 +6866,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary Delete team * @param orgId The id of the Organization. * @param teamId The id of the Team. @@ -6032,7 +6903,7 @@ export class MiroApi { } /** - * 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 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.

* @summary Get team * @param orgId The id of the Organization. * @param teamId The id of the Team. @@ -6069,7 +6940,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary List teams * @param orgId The id of the Organization. * @param limit @@ -6123,7 +6994,7 @@ export class MiroApi { } /** - * 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.

+ * 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.

* @summary Update team * @param orgId The id of the Organization. * @param teamId The id of the Team. @@ -6136,15 +7007,270 @@ export class MiroApi { ): Promise<{response: Response; body: Team}> { const localVarPath = '/v2/orgs/{org_id}/teams/{team_id}' .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) - .replace('{' + 'team_id' + '}', encodeURIComponent(String(teamId))) + .replace('{' + 'team_id' + '}', encodeURIComponent(String(teamId))) + 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 enterpriseUpdateTeam.') + } + // verify required parameter 'teamId' is not null or undefined + if (teamId === null || teamId === undefined) { + throw new Error('Required parameter teamId was null or undefined when calling enterpriseUpdateTeam.') + } + + 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(teamChanges, 'TeamChanges')), + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'Team') + + return {response, body} + } + + /** + * Adds a text item to a board.

Required scope

boards:write

Rate limiting

Level 2
+ * @summary Create text item + * @param boardId Unique identifier (ID) of the board where you want to create the item. + * @param textCreateRequest + */ + async createTextItem( + boardId: string, + textCreateRequest: TextCreateRequest, + ): Promise<{response: Response; body: TextItem}> { + const localVarPath = '/v2/boards/{board_id}/texts'.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 createTextItem.') + } + + 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, + JSON.stringify(ObjectSerializer.serialize(textCreateRequest, 'TextCreateRequest')), + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'TextItem') + + return {response, body} + } + + /** + * Deletes a text item from the board

Required scope

boards:write

Rate limiting

Level 3
+ * @summary Delete text 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 deleteTextItem(boardId: string, itemId: string): Promise<{response: Response; body: object}> { + const localVarPath = '/v2/boards/{board_id}/texts/{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 deleteTextItem.') + } + // 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 deleteTextItem.') + } + + 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 text item on a board.

Required scope

boards:read

Rate limiting

Level 1
+ * @summary Get text 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 getTextItem(boardId: string, itemId: string): Promise<{response: Response; body: TextItem}> { + const localVarPath = '/v2/boards/{board_id}/texts/{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 getTextItem.') + } + // 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 getTextItem.') + } + + 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, 'TextItem') + + return {response, body} + } + + /** + * 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
+ * @summary Update text 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 textUpdateRequest + */ + async updateTextItem( + boardId: string, + itemId: string, + textUpdateRequest: TextUpdateRequest, + ): Promise<{response: Response; body: TextItem}> { + const localVarPath = '/v2/boards/{board_id}/texts/{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 updateTextItem.') + } + // 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 updateTextItem.') + } + + 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(textUpdateRequest, 'TextUpdateRequest')), + + this.logger, + ) + + const body = ObjectSerializer.deserialize(bodyAsJson, 'TextItem') + + 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} + } + + /** + * 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.

+ * @summary Create user group member + * @param orgId The id of the Organization. + * @param groupId The ID of a user group. + * @param createGroupMemberRequest + */ + async enterpriseCreateGroupMember( + orgId: string, + groupId: string, + createGroupMemberRequest: CreateGroupMemberRequest, + ): Promise<{response: Response; body: GroupMember}> { + const localVarPath = '/v2/orgs/{org_id}/groups/{group_id}/members' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'group_id' + '}', encodeURIComponent(String(groupId))) 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 enterpriseUpdateTeam.') + throw new Error('Required parameter orgId was null or undefined when calling enterpriseCreateGroupMember.') } - // verify required parameter 'teamId' is not null or undefined - if (teamId === null || teamId === undefined) { - throw new Error('Required parameter teamId was null or undefined when calling enterpriseUpdateTeam.') + // verify required parameter 'groupId' is not null or undefined + if (groupId === null || groupId === undefined) { + throw new Error('Required parameter groupId was null or undefined when calling enterpriseCreateGroupMember.') } const urlResource = new URL(localVarPath, this.basePath) @@ -6152,36 +7278,46 @@ export class MiroApi { const {response, bodyAsJson} = await makeJsonRequest( typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'PATCH', + 'POST', urlResource, - JSON.stringify(ObjectSerializer.serialize(teamChanges, 'TeamChanges')), + JSON.stringify(ObjectSerializer.serialize(createGroupMemberRequest, 'CreateGroupMemberRequest')), this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'Team') + const body = ObjectSerializer.deserialize(bodyAsJson, 'GroupMember') return {response, body} } /** - * Adds a text item to a board.

Required scope

boards:write

Rate limiting

Level 2
- * @summary Create text item - * @param boardId Unique identifier (ID) of the board where you want to create the item. - * @param textCreateRequest + * 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.

+ * @summary Delete user group member + * @param orgId The id of the Organization. + * @param groupId The ID of a user group. + * @param memberId The ID of a group member. */ - async createTextItem( - boardId: string, - textCreateRequest: TextCreateRequest, - ): Promise<{response: Response; body: TextItem}> { - const localVarPath = '/v2/boards/{board_id}/texts'.replace( - '{' + 'board_id' + '}', - encodeURIComponent(String(boardId)), - ) + async enterpriseDeleteGroupMember( + orgId: string, + groupId: string, + memberId: string, + ): Promise<{response: Response; body?: any}> { + const localVarPath = '/v2/orgs/{org_id}/groups/{group_id}/members/{member_id}' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'group_id' + '}', encodeURIComponent(String(groupId))) + .replace('{' + 'member_id' + '}', encodeURIComponent(String(memberId))) 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 createTextItem.') + // 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 enterpriseDeleteGroupMember.') + } + // verify required parameter 'groupId' is not null or undefined + if (groupId === null || groupId === undefined) { + throw new Error('Required parameter groupId was null or undefined when calling enterpriseDeleteGroupMember.') + } + // verify required parameter 'memberId' is not null or undefined + if (memberId === null || memberId === undefined) { + throw new Error('Required parameter memberId was null or undefined when calling enterpriseDeleteGroupMember.') } const urlResource = new URL(localVarPath, this.basePath) @@ -6189,36 +7325,46 @@ export class MiroApi { const {response, bodyAsJson} = await makeJsonRequest( typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'POST', + 'DELETE', urlResource, - JSON.stringify(ObjectSerializer.serialize(textCreateRequest, 'TextCreateRequest')), + undefined, this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'TextItem') + const body = bodyAsJson return {response, body} } /** - * Deletes a text item from the board

Required scope

boards:write

Rate limiting

Level 3
- * @summary Delete text 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. + * 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.

+ * @summary Get user group member + * @param orgId The id of the Organization. + * @param groupId The ID of a user group. + * @param memberId The ID of a group member. */ - async deleteTextItem(boardId: string, itemId: string): Promise<{response: Response; body: object}> { - const localVarPath = '/v2/boards/{board_id}/texts/{item_id}' - .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) - .replace('{' + 'item_id' + '}', encodeURIComponent(String(itemId))) + async enterpriseGetGroupMember( + orgId: string, + groupId: string, + memberId: string, + ): Promise<{response: Response; body: GroupMember}> { + const localVarPath = '/v2/orgs/{org_id}/groups/{group_id}/members/{member_id}' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'group_id' + '}', encodeURIComponent(String(groupId))) + .replace('{' + 'member_id' + '}', encodeURIComponent(String(memberId))) 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 deleteTextItem.') + // 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 enterpriseGetGroupMember.') } - // 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 deleteTextItem.') + // verify required parameter 'groupId' is not null or undefined + if (groupId === null || groupId === undefined) { + throw new Error('Required parameter groupId was null or undefined when calling enterpriseGetGroupMember.') + } + // verify required parameter 'memberId' is not null or undefined + if (memberId === null || memberId === undefined) { + throw new Error('Required parameter memberId was null or undefined when calling enterpriseGetGroupMember.') } const urlResource = new URL(localVarPath, this.basePath) @@ -6226,36 +7372,54 @@ export class MiroApi { const {response, bodyAsJson} = await makeJsonRequest( typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'DELETE', + 'GET', urlResource, undefined, this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'object') + const body = ObjectSerializer.deserialize(bodyAsJson, 'GroupMember') return {response, body} } /** - * Retrieves information for a specific text item on a board.

Required scope

boards:read

Rate limiting

Level 1
- * @summary Get text 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. + * 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.

+ * @summary List of user group members + * @param orgId The id of the Organization. + * @param groupId The ID of a user group. + * @param limit The maximum number of members in the result list. + * @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. */ - async getTextItem(boardId: string, itemId: string): Promise<{response: Response; body: TextItem}> { - const localVarPath = '/v2/boards/{board_id}/texts/{item_id}' - .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) - .replace('{' + 'item_id' + '}', encodeURIComponent(String(itemId))) + async enterpriseGetGroupMembers( + orgId: string, + groupId: string, + query?: { + limit?: number + + cursor?: string + }, + ): Promise<{response: Response; body: GroupMembersPage}> { + const localVarPath = '/v2/orgs/{org_id}/groups/{group_id}/members' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'group_id' + '}', encodeURIComponent(String(groupId))) 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 getTextItem.') + // 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 enterpriseGetGroupMembers.') } - // 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 getTextItem.') + // verify required parameter 'groupId' is not null or undefined + if (groupId === null || groupId === undefined) { + throw new Error('Required parameter groupId was null or undefined when calling enterpriseGetGroupMembers.') + } + + if (query?.limit !== undefined) { + localVarQueryParameters.append('limit', ObjectSerializer.serialize(query?.limit, 'number')) + } + + if (query?.cursor !== undefined) { + localVarQueryParameters.append('cursor', ObjectSerializer.serialize(query?.cursor, 'string')) } const urlResource = new URL(localVarPath, this.basePath) @@ -6270,34 +7434,34 @@ export class MiroApi { this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'TextItem') + const body = ObjectSerializer.deserialize(bodyAsJson, 'GroupMembersPage') return {response, body} } /** - * 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
- * @summary Update text 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 textUpdateRequest + * 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.

+ * @summary Bulk edit of membership in user group + * @param orgId The id of the Organization. + * @param groupId The ID of a user group. + * @param updateUserGroupMembersRequest */ - async updateTextItem( - boardId: string, - itemId: string, - textUpdateRequest: TextUpdateRequest, - ): Promise<{response: Response; body: TextItem}> { - const localVarPath = '/v2/boards/{board_id}/texts/{item_id}' - .replace('{' + 'board_id' + '}', encodeURIComponent(String(boardId))) - .replace('{' + 'item_id' + '}', encodeURIComponent(String(itemId))) + async enterpriseUpdateGroupMembers( + orgId: string, + groupId: string, + updateUserGroupMembersRequest: UpdateUserGroupMembersRequest, + ): Promise<{response: Response; body: Array}> { + const localVarPath = '/v2/orgs/{org_id}/groups/{group_id}/members' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'group_id' + '}', encodeURIComponent(String(groupId))) 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 updateTextItem.') + // 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 enterpriseUpdateGroupMembers.') } - // 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 updateTextItem.') + // verify required parameter 'groupId' is not null or undefined + if (groupId === null || groupId === undefined) { + throw new Error('Required parameter groupId was null or undefined when calling enterpriseUpdateGroupMembers.') } const urlResource = new URL(localVarPath, this.basePath) @@ -6307,32 +7471,44 @@ export class MiroApi { typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, 'PATCH', urlResource, - JSON.stringify(ObjectSerializer.serialize(textUpdateRequest, 'TextUpdateRequest')), + JSON.stringify(ObjectSerializer.serialize(updateUserGroupMembersRequest, 'UpdateUserGroupMembersRequest')), this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'TextItem') + const body = ObjectSerializer.deserialize(bodyAsJson, 'Array') 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 + * 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.

+ * @summary Get user group team + * @param orgId The id of the Organization. + * @param groupId The ID of a user group. + * @param teamId The id of the Team. */ - async revokeToken(accessToken: string): Promise<{response: Response; body?: any}> { - const localVarPath = '/v1/oauth/revoke' + async enterpriseGroupsGetTeam( + orgId: string, + groupId: string, + teamId: string, + ): Promise<{response: Response; body: GroupTeam}> { + const localVarPath = '/v2/orgs/{org_id}/groups/{group_id}/teams/{team_id}' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'group_id' + '}', encodeURIComponent(String(groupId))) + .replace('{' + 'team_id' + '}', encodeURIComponent(String(teamId))) 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.') + // 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 enterpriseGroupsGetTeam.') } - - if (accessToken !== undefined) { - localVarQueryParameters.append('access_token', ObjectSerializer.serialize(accessToken, 'string')) + // verify required parameter 'groupId' is not null or undefined + if (groupId === null || groupId === undefined) { + throw new Error('Required parameter groupId was null or undefined when calling enterpriseGroupsGetTeam.') + } + // verify required parameter 'teamId' is not null or undefined + if (teamId === null || teamId === undefined) { + throw new Error('Required parameter teamId was null or undefined when calling enterpriseGroupsGetTeam.') } const urlResource = new URL(localVarPath, this.basePath) @@ -6340,25 +7516,55 @@ export class MiroApi { const {response, bodyAsJson} = await makeJsonRequest( typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, - 'POST', + 'GET', urlResource, undefined, this.logger, ) - const body = bodyAsJson + const body = ObjectSerializer.deserialize(bodyAsJson, 'GroupTeam') 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 + * 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.

+ * @summary Get teams of a user group + * @param orgId The id of the Organization. + * @param groupId The ID of a user group. + * @param limit The maximum number of teams in the result list. + * @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. */ - async tokenInfo(): Promise<{response: Response; body: TokenInformation}> { - const localVarPath = '/v1/oauth-token' + async enterpriseGroupsGetTeams( + orgId: string, + groupId: string, + query?: { + limit?: number + + cursor?: string + }, + ): Promise<{response: Response; body: GroupTeamsPage}> { + const localVarPath = '/v2/orgs/{org_id}/groups/{group_id}/teams' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'group_id' + '}', encodeURIComponent(String(groupId))) 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 enterpriseGroupsGetTeams.') + } + // verify required parameter 'groupId' is not null or undefined + if (groupId === null || groupId === undefined) { + throw new Error('Required parameter groupId was null or undefined when calling enterpriseGroupsGetTeams.') + } + + if (query?.limit !== undefined) { + localVarQueryParameters.append('limit', ObjectSerializer.serialize(query?.limit, 'number')) + } + + if (query?.cursor !== undefined) { + localVarQueryParameters.append('cursor', ObjectSerializer.serialize(query?.cursor, 'string')) + } const urlResource = new URL(localVarPath, this.basePath) urlResource.search = localVarQueryParameters.toString() @@ -6372,21 +7578,27 @@ export class MiroApi { this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'TokenInformation') + const body = ObjectSerializer.deserialize(bodyAsJson, 'GroupTeamsPage') return {response, body} } /** - * Creates a webhook subscription to receive notifications when an item on a board is updated. Subscriptions are created per user, per board. You can create multiple subscriptions. We currently support all board items except tags, connectors, and comments.

Required scope

boards:read

Rate limiting

Level 2
- * @summary Create webhook subscription - * @param createBoardSubscriptionRequest + * 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.

+ * @summary Create user group + * @param orgId The id of the Organization. + * @param createGroupRequest */ - async createBoardSubscription( - createBoardSubscriptionRequest: CreateBoardSubscriptionRequest, - ): Promise<{response: Response; body: BoardSubscription}> { - const localVarPath = '/v2-experimental/webhooks/board_subscriptions' + async enterpriseCreateGroup( + orgId: string, + createGroupRequest: CreateGroupRequest, + ): Promise<{response: Response; body: Group}> { + const localVarPath = '/v2/orgs/{org_id}/groups'.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 enterpriseCreateGroup.') + } const urlResource = new URL(localVarPath, this.basePath) urlResource.search = localVarQueryParameters.toString() @@ -6395,30 +7607,34 @@ export class MiroApi { typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, 'POST', urlResource, - JSON.stringify(ObjectSerializer.serialize(createBoardSubscriptionRequest, 'CreateBoardSubscriptionRequest')), + JSON.stringify(ObjectSerializer.serialize(createGroupRequest, 'CreateGroupRequest')), this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'BoardSubscription') + const body = ObjectSerializer.deserialize(bodyAsJson, 'Group') return {response, body} } /** - * Deletes the specified webhook subscription.

Required scope

boards:read

Rate limiting

Level 2
- * @summary Delete webhook subscription - * @param subscriptionId Unique identifier (ID) of the subscription that you want to delete + * 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.

+ * @summary Delete user group + * @param orgId The id of the Organization. + * @param groupId The ID of a user group. */ - async deleteSubscriptionById(subscriptionId: string): Promise<{response: Response; body: object}> { - const localVarPath = '/v2-experimental/webhooks/subscriptions/{subscription_id}'.replace( - '{' + 'subscription_id' + '}', - encodeURIComponent(String(subscriptionId)), - ) + async enterpriseDeleteGroup(orgId: string, groupId: string): Promise<{response: Response; body?: any}> { + const localVarPath = '/v2/orgs/{org_id}/groups/{group_id}' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'group_id' + '}', encodeURIComponent(String(groupId))) let localVarQueryParameters = new URLSearchParams() - // verify required parameter 'subscriptionId' is not null or undefined - if (subscriptionId === null || subscriptionId === undefined) { - throw new Error('Required parameter subscriptionId was null or undefined when calling deleteSubscriptionById.') + // 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 enterpriseDeleteGroup.') + } + // verify required parameter 'groupId' is not null or undefined + if (groupId === null || groupId === undefined) { + throw new Error('Required parameter groupId was null or undefined when calling enterpriseDeleteGroup.') } const urlResource = new URL(localVarPath, this.basePath) @@ -6433,25 +7649,29 @@ export class MiroApi { this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'object') + const body = bodyAsJson return {response, body} } /** - * Retrieves information for a specific webhook subscription.

Required scope

boards:read

Rate limiting

Level 2
- * @summary Get specific webhook subscription - * @param subscriptionId Unique identifier (ID) of the subscription that you want to retrieve + * 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.

+ * @summary Get user group + * @param orgId The id of the Organization. + * @param groupId The ID of a user group. */ - async getSubscriptionById(subscriptionId: string): Promise<{response: Response; body: GenericSubscription}> { - const localVarPath = '/v2-experimental/webhooks/subscriptions/{subscription_id}'.replace( - '{' + 'subscription_id' + '}', - encodeURIComponent(String(subscriptionId)), - ) + async enterpriseGetGroup(orgId: string, groupId: string): Promise<{response: Response; body: Group}> { + const localVarPath = '/v2/orgs/{org_id}/groups/{group_id}' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'group_id' + '}', encodeURIComponent(String(groupId))) let localVarQueryParameters = new URLSearchParams() - // verify required parameter 'subscriptionId' is not null or undefined - if (subscriptionId === null || subscriptionId === undefined) { - throw new Error('Required parameter subscriptionId was null or undefined when calling getSubscriptionById.') + // 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 enterpriseGetGroup.') + } + // verify required parameter 'groupId' is not null or undefined + if (groupId === null || groupId === undefined) { + throw new Error('Required parameter groupId was null or undefined when calling enterpriseGetGroup.') } const urlResource = new URL(localVarPath, this.basePath) @@ -6466,27 +7686,35 @@ export class MiroApi { this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'GenericSubscription') + const body = ObjectSerializer.deserialize(bodyAsJson, 'Group') return {response, body} } /** - * Retrieves information about all webhook subscriptions for a specific user.

Required scope

boards:read

Rate limiting

Level 4
- * @summary Get webhook subscriptions - * @param limit - * @param cursor + * 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.

+ * @summary List of user groups + * @param orgId The id of the Organization. + * @param limit The maximum number of user groups in the result list. + * @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. */ - async getUserSubscriptions(query?: { - limit?: string + async enterpriseGetGroups( + orgId: string, + query?: { + limit?: number - cursor?: string - }): Promise<{response: Response; body: GenericSubscriptionsCursorPaged}> { - const localVarPath = '/v2-experimental/webhooks/subscriptions' + cursor?: string + }, + ): Promise<{response: Response; body: GroupsPage}> { + const localVarPath = '/v2/orgs/{org_id}/groups'.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 enterpriseGetGroups.') + } if (query?.limit !== undefined) { - localVarQueryParameters.append('limit', ObjectSerializer.serialize(query?.limit, 'string')) + localVarQueryParameters.append('limit', ObjectSerializer.serialize(query?.limit, 'number')) } if (query?.cursor !== undefined) { @@ -6505,29 +7733,34 @@ export class MiroApi { this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'GenericSubscriptionsCursorPaged') + const body = ObjectSerializer.deserialize(bodyAsJson, 'GroupsPage') return {response, body} } /** - * Updates the status or the callback URL of an existing webhook subscription.

Required scope

boards:read

Rate limiting

Level 2
- * @summary Update webhook subscription - * @param subscriptionId - * @param updateBoardSubscriptionRequest + * 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.

+ * @summary Update user group + * @param orgId The id of the Organization. + * @param groupId The ID of a user group. + * @param updateGroupRequest */ - async updateBoardSubscription( - subscriptionId: string, - updateBoardSubscriptionRequest: UpdateBoardSubscriptionRequest, - ): Promise<{response: Response; body: BoardSubscription}> { - const localVarPath = '/v2-experimental/webhooks/board_subscriptions/{subscription_id}'.replace( - '{' + 'subscription_id' + '}', - encodeURIComponent(String(subscriptionId)), - ) + async enterpriseUpdateGroup( + orgId: string, + groupId: string, + updateGroupRequest: UpdateGroupRequest, + ): Promise<{response: Response; body: Group}> { + const localVarPath = '/v2/orgs/{org_id}/groups/{group_id}' + .replace('{' + 'org_id' + '}', encodeURIComponent(String(orgId))) + .replace('{' + 'group_id' + '}', encodeURIComponent(String(groupId))) let localVarQueryParameters = new URLSearchParams() - // verify required parameter 'subscriptionId' is not null or undefined - if (subscriptionId === null || subscriptionId === undefined) { - throw new Error('Required parameter subscriptionId was null or undefined when calling updateBoardSubscription.') + // 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 enterpriseUpdateGroup.') + } + // verify required parameter 'groupId' is not null or undefined + if (groupId === null || groupId === undefined) { + throw new Error('Required parameter groupId was null or undefined when calling enterpriseUpdateGroup.') } const urlResource = new URL(localVarPath, this.basePath) @@ -6537,12 +7770,12 @@ export class MiroApi { typeof this.accessToken === 'function' ? await this.accessToken() : this.accessToken, 'PATCH', urlResource, - JSON.stringify(ObjectSerializer.serialize(updateBoardSubscriptionRequest, 'UpdateBoardSubscriptionRequest')), + JSON.stringify(ObjectSerializer.serialize(updateGroupRequest, 'UpdateGroupRequest')), this.logger, ) - const body = ObjectSerializer.deserialize(bodyAsJson, 'BoardSubscription') + const body = ObjectSerializer.deserialize(bodyAsJson, 'Group') return {response, body} } diff --git a/packages/miro-api/highlevel/index.ts b/packages/miro-api/highlevel/index.ts index 29b715bfa..f6ed2ce6a 100644 --- a/packages/miro-api/highlevel/index.ts +++ b/packages/miro-api/highlevel/index.ts @@ -38,7 +38,7 @@ export class Api extends BaseApi { } /** - * 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
+ * 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
* @summary Create board * @param boardChanges */ @@ -49,7 +49,7 @@ export class Api extends BaseApi { } /** - * Retrieves information about a board.

Required scope

boards:read

Rate limiting

Level 1
+ * Retrieves information about a board.

Required scope

boards:read

Rate limiting

Level 1
* @summary Get specific board * @param boardId Unique identifier (ID) of the board that you want to retrieve. */ @@ -60,7 +60,7 @@ export class Api extends BaseApi { } /** - * 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.

+ * 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.

* @summary Get organization info * @param orgId id of the organization */ @@ -109,7 +109,7 @@ export class Organization extends BaseOrganization { } /** - * 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.

+ * 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.

* @summary Create team * @param createTeamRequest */ @@ -120,7 +120,7 @@ export class Organization extends BaseOrganization { } /** - * 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.

+ * 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.

* @summary Get organization settings */ async getDataClassification(): Promise { @@ -130,7 +130,7 @@ export class Organization extends BaseOrganization { } /** - * 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 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.

* @summary Get default team settings */ async getDefaultTeamSettings(): Promise { @@ -140,7 +140,7 @@ export class Organization extends BaseOrganization { } /** - * 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.

+ * 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 * @param memberId id of the organization member */ @@ -153,7 +153,7 @@ export class Organization extends BaseOrganization { } /** - * 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 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.

* @summary Get team * @param teamId The id of the Team. */ @@ -198,7 +198,7 @@ export class Team extends BaseTeam { } /** - * 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.

+ * 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.

* @summary Delete team */ async deleteTeam(): Promise { @@ -206,7 +206,7 @@ export class Team extends BaseTeam { } /** - * 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.

+ * 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.

* @summary Delete team member from team * @param memberId The id of the Team Member */ @@ -215,7 +215,7 @@ export class Team extends BaseTeam { } /** - * 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 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.

* @summary Get board classification * @param boardId Unique identifier of the board that you want to retrieve. */ @@ -230,7 +230,7 @@ export class Team extends BaseTeam { } /** - * 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.

+ * 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.

* @summary Update board classification * @param boardId Unique identifier of the board that you want to update. * @param dataClassificationLabelId @@ -248,7 +248,7 @@ export class Team extends BaseTeam { } /** - * 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.

+ * 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.

* @summary Bulk update boards classification * @param updateBoardsDataClassificationLabelRequest */ @@ -263,7 +263,7 @@ export class Team extends BaseTeam { } /** - * 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.

+ * 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.

* @summary Get team settings */ async getDataClassification(): Promise { @@ -275,7 +275,7 @@ export class Team extends BaseTeam { } /** - * 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.

+ * 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.

* @summary Update team settings * @param updateTeamSettingsRequest */ @@ -290,7 +290,7 @@ export class Team extends BaseTeam { } /** - * 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.

+ * 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.

* @summary Invite team members * @param teamMemberInvite */ @@ -299,7 +299,7 @@ export class Team extends BaseTeam { } /** - * 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.

+ * 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.

* @summary Get team member * @param memberId The id of the Team Member */ @@ -311,7 +311,7 @@ export class Team extends BaseTeam { } /** - * 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.

+ * 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.

* @summary Update team * @param teamChanges */ @@ -320,7 +320,7 @@ export class Team extends BaseTeam { } /** - * 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 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.

* @summary Get team settings * @param teamId The id of the Team. */ @@ -331,7 +331,7 @@ export class Team extends BaseTeam { } /** - * 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.

+ * 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.

* @summary Update team settings * @param teamId The id of the Team. * @param teamSettingsChanges @@ -389,7 +389,7 @@ export class TeamMember extends BaseTeamMember { } /** - * 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.

+ * 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.

* @summary Update team member * @param teamMemberChanges */ @@ -431,7 +431,7 @@ export class Board extends BaseBoard { } /** - * Adds an app card item to a board.

Required scope

boards:write

Rate limiting

Level 2
+ * Adds an app card item to a board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Create app card item * @param appCardCreateRequest */ @@ -442,7 +442,7 @@ export class Board extends BaseBoard { } /** - * Adds a card item to a board

Required scope

boards:write

Rate limiting

Level 2
+ * Adds a card item to a board

Required scope

boards:write

Rate limiting

Level 2
* @summary Create card item * @param cardCreateRequest */ @@ -453,7 +453,7 @@ export class Board extends BaseBoard { } /** - * Adds a connector to a board.

Required scope

boards:write

Rate limiting

Level 2
+ * Adds a connector to a board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Create connector * @param connectorCreationData */ @@ -464,7 +464,7 @@ export class Board extends BaseBoard { } /** - * Adds an embed item containing external content to a board.

Required scope

boards:write

Rate limiting

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

Required scope

boards:write

Rate limiting

Level 2
* @summary Create embed item * @param embedCreateRequest */ @@ -475,7 +475,7 @@ export class Board extends BaseBoard { } /** - * Adds a frame to a board.

Required scope

boards:write

Rate limiting

Level 2
+ * Adds a frame to a board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Create frame * @param frameCreateRequest */ @@ -486,7 +486,7 @@ export class Board extends BaseBoard { } /** - * Adds a shape 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
* @summary Create shape item * @param shapeCreateRequest */ @@ -497,7 +497,7 @@ export class Board extends BaseBoard { } /** - * Adds a sticky note item to a board.

Required scope

boards:write

Rate limiting

Level 2
+ * Adds a sticky note item to a board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Create sticky note item * @param stickyNoteCreateRequest */ @@ -510,7 +510,7 @@ export class Board extends BaseBoard { } /** - * Creates a tag on a board.

Required scope

boards:write

Rate limiting

Level 1
+ * Creates a tag on a board.

Required scope

boards:write

Rate limiting

Level 1
* @summary Create tag * @param tagCreateRequest */ @@ -521,7 +521,7 @@ export class Board extends BaseBoard { } /** - * Adds a text item to a board.

Required scope

boards:write

Rate limiting

Level 2
+ * Adds a text item to a board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Create text item * @param textCreateRequest */ @@ -532,7 +532,7 @@ export class Board extends BaseBoard { } /** - * Adds an image item to a board by specifying a file from device.

Required scope

boards:write

Rate limiting

Level 2
+ * 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 resource Select a file to upload. Maximum file size is 6 MB. * @param data @@ -547,7 +547,7 @@ export class Board extends BaseBoard { } /** - * Adds a document item to a board by selecting file from device.

Required scope

boards:write

Rate limiting

Level 2
+ * 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 resource Select a file to upload. Maximum file size is 6 MB. * @param data @@ -562,7 +562,7 @@ export class Board extends BaseBoard { } /** - * Retrieves information for a specific app card item on a board.

Required scope

boards:read

Rate limiting

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

Required scope

boards:read

Rate limiting

Level 1
* @summary Get app card item * @param itemId Unique identifier (ID) of the item that you want to retrieve. */ @@ -573,7 +573,7 @@ export class Board extends BaseBoard { } /** - * Retrieves information for a specific card item on a board

Required scope

boards:read

Rate limiting

Level 1
+ * Retrieves information for a specific card item on a board

Required scope

boards:read

Rate limiting

Level 1
* @summary Get card item * @param itemId Unique identifier (ID) of the item that you want to retrieve. */ @@ -584,7 +584,7 @@ export class Board extends BaseBoard { } /** - * Retrieves information for a specific connector 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
* @summary Get specific connector * @param connectorId Unique identifier (ID) of the connector that you want to retrieve. */ @@ -595,7 +595,7 @@ export class Board extends BaseBoard { } /** - * Retrieves information for a specific document item on a board

Required scope

boards:read

Rate limiting

Level 1
+ * Retrieves information for a specific document item on a board

Required scope

boards:read

Rate limiting

Level 1
* @summary Get document item * @param itemId Unique identifier (ID) of the item that you want to retrieve. */ @@ -606,7 +606,7 @@ export class Board extends BaseBoard { } /** - * Retrieves information for a specific embed item on a board.

Required scope

boards:read

Rate limiting

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

Required scope

boards:read

Rate limiting

Level 1
* @summary Get embed item * @param itemId Unique identifier (ID) of the item that you want to retrieve. */ @@ -617,7 +617,7 @@ export class Board extends BaseBoard { } /** - * Retrieves information for a specific frame on a board.

Required scope

boards:read

Rate limiting

Level 1
+ * Retrieves information for a specific frame on a board.

Required scope

boards:read

Rate limiting

Level 1
* @summary Get frame * @param itemId Unique identifier (ID) of the frame that you want to retrieve. */ @@ -628,7 +628,7 @@ export class Board extends BaseBoard { } /** - * Retrieves information for a specific image item on a board.

Required scope

boards:read

Rate limiting

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

Required scope

boards:read

Rate limiting

Level 1
* @summary Get image item * @param itemId Unique identifier (ID) of the item that you want to retrieve. */ @@ -639,7 +639,7 @@ export class Board extends BaseBoard { } /** - * Retrieves information for a specific shape 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
* @summary Get shape item * @param itemId Unique identifier (ID) of the item that you want to retrieve. */ @@ -650,7 +650,7 @@ export class Board extends BaseBoard { } /** - * Retrieves information for a board member.

Required scope

boards:read

Rate limiting

Level 1
+ * Retrieves information for a board member.

Required scope

boards:read

Rate limiting

Level 1
* @summary Get specific board member * @param boardMemberId Unique identifier (ID) of the board member whose role you want to retrieve. */ @@ -661,7 +661,7 @@ export class Board extends BaseBoard { } /** - * Retrieves information for a specific sticky note item on a board.

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
* @summary Get sticky note item * @param itemId Unique identifier (ID) of the item that you want to retrieve. */ @@ -672,7 +672,7 @@ export class Board extends BaseBoard { } /** - * Retrieves information for a specific tag.

Required scope

boards:write

Rate limiting

Level 1
+ * Retrieves information for a specific tag.

Required scope

boards:write

Rate limiting

Level 1
* @summary Get tag * @param tagId Unique identifier (ID) of the tag that you want to retrieve. */ @@ -683,7 +683,7 @@ export class Board extends BaseBoard { } /** - * Retrieves information for a specific text item on a board.

Required scope

boards:read

Rate limiting

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

Required scope

boards:read

Rate limiting

Level 1
* @summary Get text item * @param itemId Unique identifier (ID) of the item that you want to retrieve. */ @@ -694,7 +694,7 @@ export class Board extends BaseBoard { } /** - * 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
+ * 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
* @summary Copy board * @param copyBoardChanges */ @@ -705,7 +705,7 @@ export class Board extends BaseBoard { } /** - * 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 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
* @summary Share board * @param boardMembersInvite */ @@ -714,7 +714,7 @@ export class Board extends BaseBoard { } /** - * Updates a specific board.

Required scope

boards:write

Rate limiting

Level 2
+ * Updates a specific board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Update board * @param boardChanges */ @@ -723,7 +723,7 @@ export class Board extends BaseBoard { } /** - * 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 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
* @summary Delete board */ async delete(): Promise { @@ -731,7 +731,7 @@ export class Board extends BaseBoard { } /** - * Removes a board member from 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
* @summary Remove board member * @param boardMemberId Unique identifier (ID) of the board member whose role you want to delete. */ @@ -740,7 +740,7 @@ export class Board extends BaseBoard { } /** - * 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
+ * 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
* @summary Remove tag from item * @param itemId Unique identifier (ID) of the item that you want to remove the tag from. * @param tagId Unique identifier (ID) of the tag that you want to remove from the item. @@ -770,7 +770,7 @@ export class BoardMember extends BaseBoardMember { } /** - * Updates the role of a board member.

Required scope

boards:write

Rate limiting

Level 2
+ * Updates the role of a board member.

Required scope

boards:write

Rate limiting

Level 2
* @summary Update board member * @param boardMemberChanges */ @@ -796,7 +796,7 @@ export class Item extends BaseItem { } /** - * Updates the position or the parent of an item on a board.

Required scope

boards:write

Rate limiting

Level 2
+ * Updates the position or the parent of an item on a board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Update item position or parent * @param genericItemUpdate */ @@ -805,7 +805,7 @@ export class Item extends BaseItem { } /** - * Deletes an item from a board.

Required scope

boards:write

Rate limiting

Level 3
+ * Deletes an item from a board.

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete item */ async delete(): Promise { @@ -830,7 +830,7 @@ export class AppCardItem extends BaseAppCardItem { } /** - * 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 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
* @summary Update app card item * @param appCardUpdateRequest */ @@ -839,7 +839,7 @@ export class AppCardItem extends BaseAppCardItem { } /** - * Deletes an app card item from a board.

Required scope

boards:write

Rate limiting

Level 3
+ * Deletes an app card item from a board.

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete app card item */ async delete(): Promise { @@ -847,7 +847,7 @@ export class AppCardItem extends BaseAppCardItem { } /** - * Retrieves all the tags from the specified item.

Required scope

boards:read

Rate limiting

Level 1
+ * Retrieves all the tags from the specified item.

Required scope

boards:read

Rate limiting

Level 1
* @summary Get tags from item */ async getAllTags(): Promise { @@ -861,7 +861,7 @@ export class AppCardItem extends BaseAppCardItem { } /** - * 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
+ * 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
* @summary Remove tag from item * @param tagId Unique identifier (ID) of the tag that you want to remove from the item. */ @@ -870,7 +870,7 @@ export class AppCardItem extends BaseAppCardItem { } /** - * 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
+ * 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
* @summary Attach tag to item * @param tagId Unique identifier (ID) of the tag you want to add to the item. */ @@ -896,7 +896,7 @@ export class CardItem extends BaseCardItem { } /** - * 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 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
* @summary Update card item * @param cardUpdateRequest */ @@ -905,7 +905,7 @@ export class CardItem extends BaseCardItem { } /** - * Deletes a card item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ * Deletes a card item from the board.

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete card item */ async delete(): Promise { @@ -913,7 +913,7 @@ export class CardItem extends BaseCardItem { } /** - * Retrieves all the tags from the specified item.

Required scope

boards:read

Rate limiting

Level 1
+ * Retrieves all the tags from the specified item.

Required scope

boards:read

Rate limiting

Level 1
* @summary Get tags from item */ async getAllTags(): Promise { @@ -927,7 +927,7 @@ export class CardItem extends BaseCardItem { } /** - * 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
+ * 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
* @summary Remove tag from item * @param tagId Unique identifier (ID) of the tag that you want to remove from the item. */ @@ -936,7 +936,7 @@ export class CardItem extends BaseCardItem { } /** - * 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
+ * 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
* @summary Attach tag to item * @param tagId Unique identifier (ID) of the tag you want to add to the item. */ @@ -962,7 +962,7 @@ export class DocumentItem extends BaseDocumentItem { } /** - * Updates a document item on a board by using file from a device.

Required scope

boards:write

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
* @summary Update document item using file from device * @param resource Select a file to upload. Maximum file size is 6 MB. * @param data @@ -975,7 +975,7 @@ export class DocumentItem extends BaseDocumentItem { } /** - * Updates a document item on a board

Required scope

boards:write

Rate limiting

Level 2
+ * Updates a document item on a board

Required scope

boards:write

Rate limiting

Level 2
* @summary Update document item using URL * @param documentUpdateRequest */ @@ -984,7 +984,7 @@ export class DocumentItem extends BaseDocumentItem { } /** - * Deletes a document item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ * Deletes a document item from the board.

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete document item */ async delete(): Promise { @@ -1009,7 +1009,7 @@ export class EmbedItem extends BaseEmbedItem { } /** - * 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
+ * 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
* @summary Update embed item * @param embedUpdateRequest */ @@ -1018,7 +1018,7 @@ export class EmbedItem extends BaseEmbedItem { } /** - * Deletes an embed item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ * Deletes an embed item from the board.

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete embed item */ async delete(): Promise { @@ -1043,7 +1043,7 @@ export class FrameItem extends BaseFrameItem { } /** - * 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 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
* @summary Update frame * @param frameUpdateRequest */ @@ -1052,7 +1052,7 @@ export class FrameItem extends BaseFrameItem { } /** - * Deletes a frame from a board.

Required scope

boards:write

Rate limiting

Level 3
+ * Deletes a frame from a board.

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete frame */ async delete(): Promise { @@ -1077,7 +1077,7 @@ export class ImageItem extends BaseImageItem { } /** - * Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
+ * Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Update image item using file from device * @param resource Select a file to upload. Maximum file size is 6 MB. * @param data @@ -1090,7 +1090,7 @@ export class ImageItem extends BaseImageItem { } /** - * Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
+ * Updates an image item on a board.

Required scope

boards:write

Rate limiting

Level 2
* @summary Update image item using URL * @param imageUpdateRequest */ @@ -1099,7 +1099,7 @@ export class ImageItem extends BaseImageItem { } /** - * Deletes an image item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ * Deletes an image item from the board.

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete image item */ async delete(): Promise { @@ -1124,7 +1124,7 @@ export class ShapeItem extends BaseShapeItem { } /** - * 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
+ * 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
* @summary Update shape item * @param shapeUpdateRequest */ @@ -1133,7 +1133,7 @@ export class ShapeItem extends BaseShapeItem { } /** - * Deletes a shape item from the board.

Required scope

boards:write

Rate limiting

Level 3
+ * Deletes a shape item from the board.

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete shape item */ async delete(): Promise { @@ -1158,7 +1158,7 @@ export class StickyNoteItem extends BaseStickyNoteItem { } /** - * 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
+ * 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
* @summary Update sticky note item * @param stickyNoteUpdateRequest */ @@ -1167,7 +1167,7 @@ export class StickyNoteItem extends BaseStickyNoteItem { } /** - * Deletes a sticky note item from the board.

Required scope

boards:write

Rate limiting

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

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete sticky note item */ async delete(): Promise { @@ -1175,7 +1175,7 @@ export class StickyNoteItem extends BaseStickyNoteItem { } /** - * Retrieves all the tags from the specified item.

Required scope

boards:read

Rate limiting

Level 1
+ * Retrieves all the tags from the specified item.

Required scope

boards:read

Rate limiting

Level 1
* @summary Get tags from item */ async getAllTags(): Promise { @@ -1189,7 +1189,7 @@ export class StickyNoteItem extends BaseStickyNoteItem { } /** - * 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
+ * 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
* @summary Remove tag from item * @param tagId Unique identifier (ID) of the tag that you want to remove from the item. */ @@ -1198,7 +1198,7 @@ export class StickyNoteItem extends BaseStickyNoteItem { } /** - * 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
+ * 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
* @summary Attach tag to item * @param tagId Unique identifier (ID) of the tag you want to add to the item. */ @@ -1224,7 +1224,7 @@ export class TextItem extends BaseTextItem { } /** - * 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
+ * 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
* @summary Update text item * @param textUpdateRequest */ @@ -1233,7 +1233,7 @@ export class TextItem extends BaseTextItem { } /** - * Deletes a text item from the board

Required scope

boards:write

Rate limiting

Level 3
+ * Deletes a text item from the board

Required scope

boards:write

Rate limiting

Level 3
* @summary Delete text item */ async delete(): Promise { @@ -1258,7 +1258,7 @@ export class Connector extends BaseConnector { } /** - * 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
+ * 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 connectorChangesData */ @@ -1267,7 +1267,7 @@ export class Connector extends BaseConnector { } /** - * Deletes the specified connector 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
* @summary Delete connector */ async delete(): Promise { @@ -1292,7 +1292,7 @@ export class Tag extends BaseTag { } /** - * 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
+ * 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
* @summary Update tag * @param tagUpdateRequest */ @@ -1301,7 +1301,7 @@ export class Tag extends BaseTag { } /** - * 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
+ * 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
* @summary Delete tag */ async delete(): Promise { diff --git a/packages/miro-api/model/boardChanges.ts b/packages/miro-api/model/boardChanges.ts index dc16cefdb..abcdd1ca2 100644 --- a/packages/miro-api/model/boardChanges.ts +++ b/packages/miro-api/model/boardChanges.ts @@ -23,11 +23,11 @@ export class BoardChanges { 'name'?: string = 'Untitled' 'policy'?: BoardPolicyChange /** - * Unique identifier (ID) of the team where the board must be placed. + * Unique identifier (ID) of the team where the board must be placed. **Note**: On Enterprise plan, boards can be moved via API by Board Owners, Co-Owners, and Content Admins. This behavior differs from the Miro UI, where only Board Owners can move boards. This difference is **intentional** and works as designed. On non-Enterprise plans, only Board Owners can move boards between teams—both via the API and the Miro UI. */ 'teamId'?: string /** - * Unique identifier (ID) of the project to which the board must be added. + * Unique identifier (ID) of the project to which the board must be added. **Note**: Projects have been renamed to Spaces. Use this parameter to update the space. For Starter and Edu plans, Team Admins looking to move boards between Spaces/Projects of the same team would need to be direct Board Editors on the boards to move. */ 'projectId'?: string diff --git a/packages/miro-api/model/boardExportJob.ts b/packages/miro-api/model/boardExportJob.ts new file mode 100644 index 000000000..373428c06 --- /dev/null +++ b/packages/miro-api/model/boardExportJob.ts @@ -0,0 +1,93 @@ +/** + * 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 {BoardExportJobCreator} from './boardExportJobCreator' +import {BoardExportJobTasksCount} from './boardExportJobTasksCount' +import {BoardFormat} from './boardFormat' + +/** + * @internal + * Board export job. + */ +export class BoardExportJob { + /** + * Unique identifier of the board export job. + */ + 'id'?: string + /** + * Board export job name. + */ + 'name'?: string + 'boardFormat'?: BoardFormat + /** + * Indicates the current state of the board export job. Possible values: `created`: the job has been created but not yet started. Retry the status call after some time. `in_progress`: the job is in progress, and the results are not ready yet. Retry the status call after some time. `cancelled`: the job has been cancelled and will not produce any more results. `finished`: the job is complete. You can now get results for the board export job. + */ + 'status'?: string + 'createdAt'?: Date + 'modifiedAt'?: Date + 'tasksCount'?: BoardExportJobTasksCount + 'creator'?: BoardExportJobCreator + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'id', + baseName: 'id', + type: 'string', + }, + { + name: 'name', + baseName: 'name', + type: 'string', + }, + { + name: 'boardFormat', + baseName: 'boardFormat', + type: 'BoardFormat', + }, + { + name: 'status', + baseName: 'status', + type: 'string', + }, + { + name: 'createdAt', + baseName: 'createdAt', + type: 'Date', + }, + { + name: 'modifiedAt', + baseName: 'modifiedAt', + type: 'Date', + }, + { + name: 'tasksCount', + baseName: 'tasksCount', + type: 'BoardExportJobTasksCount', + }, + { + name: 'creator', + baseName: 'creator', + type: 'BoardExportJobCreator', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return BoardExportJob.attributeTypeMap + } +} + +export namespace BoardExportJob {} diff --git a/packages/miro-api/model/boardExportJobCreator.ts b/packages/miro-api/model/boardExportJobCreator.ts new file mode 100644 index 000000000..b94a9a055 --- /dev/null +++ b/packages/miro-api/model/boardExportJobCreator.ts @@ -0,0 +1,35 @@ +/** + * 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 BoardExportJobCreator { + /** + * Unique identifier of the user who created the board export job. + */ + 'id'?: string + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'id', + baseName: 'id', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return BoardExportJobCreator.attributeTypeMap + } +} diff --git a/packages/miro-api/model/boardExportJobStatus.ts b/packages/miro-api/model/boardExportJobStatus.ts index 19bb28630..563bb38b9 100644 --- a/packages/miro-api/model/boardExportJobStatus.ts +++ b/packages/miro-api/model/boardExportJobStatus.ts @@ -10,11 +10,10 @@ * Do not edit the class manually. */ +import {ExportJobStatus} from './exportJobStatus' + export class BoardExportJobStatus { - /** - * Indicates the current state of the board export job. Possible values: `CREATED`: the job has been created but not yet started. Retry the status call after some time. `IN_PROGRESS`: the job is in progress, and the results are not ready yet. Retry the status call after some time. `FINISHED`: the job is complete. You can now get results for the board export job. - */ - 'jobStatus': string + 'jobStatus': ExportJobStatus /** @ignore */ static discriminator: string | undefined = undefined @@ -24,7 +23,7 @@ export class BoardExportJobStatus { { name: 'jobStatus', baseName: 'jobStatus', - type: 'string', + type: 'ExportJobStatus', }, ] @@ -33,3 +32,5 @@ export class BoardExportJobStatus { return BoardExportJobStatus.attributeTypeMap } } + +export namespace BoardExportJobStatus {} diff --git a/packages/miro-api/model/boardExportJobTasksCount.ts b/packages/miro-api/model/boardExportJobTasksCount.ts new file mode 100644 index 000000000..27984e144 --- /dev/null +++ b/packages/miro-api/model/boardExportJobTasksCount.ts @@ -0,0 +1,53 @@ +/** + * 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 BoardExportJobTasksCount { + /** + * Total number of tasks in the export. + */ + 'total'?: number + /** + * Successfully exported tasks count. + */ + 'success'?: number + /** + * Failed tasks count. + */ + 'error'?: number + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'total', + baseName: 'total', + type: 'number', + }, + { + name: 'success', + baseName: 'success', + type: 'number', + }, + { + name: 'error', + baseName: 'error', + type: 'number', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return BoardExportJobTasksCount.attributeTypeMap + } +} diff --git a/packages/miro-api/model/boardExportJobTasksList.ts b/packages/miro-api/model/boardExportJobTasksList.ts new file mode 100644 index 000000000..4a817900b --- /dev/null +++ b/packages/miro-api/model/boardExportJobTasksList.ts @@ -0,0 +1,52 @@ +/** + * 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 {BoardExportTask} from './boardExportTask' + +export class BoardExportJobTasksList { + /** + * Total number of results in the collection. + */ + 'total'?: number + /** + * 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 + 'data'?: Array + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'total', + baseName: 'total', + type: 'number', + }, + { + name: 'cursor', + baseName: 'cursor', + type: 'string', + }, + { + name: 'data', + baseName: 'data', + type: 'Array', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return BoardExportJobTasksList.attributeTypeMap + } +} diff --git a/packages/miro-api/model/boardExportJobsList.ts b/packages/miro-api/model/boardExportJobsList.ts new file mode 100644 index 000000000..b68733e54 --- /dev/null +++ b/packages/miro-api/model/boardExportJobsList.ts @@ -0,0 +1,56 @@ +/** + * 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 {BoardExportJob} from './boardExportJob' + +/** + * @internal + * List of export jobs. + */ +export class BoardExportJobsList { + /** + * Total number of results in the collection. + */ + 'total'?: number + /** + * 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 + 'data'?: Array + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'total', + baseName: 'total', + type: 'number', + }, + { + name: 'cursor', + baseName: 'cursor', + type: 'string', + }, + { + name: 'data', + baseName: 'data', + type: 'Array', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return BoardExportJobsList.attributeTypeMap + } +} diff --git a/packages/miro-api/model/boardExportTask.ts b/packages/miro-api/model/boardExportTask.ts new file mode 100644 index 000000000..fc1d7ce28 --- /dev/null +++ b/packages/miro-api/model/boardExportTask.ts @@ -0,0 +1,88 @@ +/** + * 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 {BoardExportTaskBoard} from './boardExportTaskBoard' + +export class BoardExportTask { + /** + * Unique identifier of the board export task. + */ + 'id': string + /** + * Indicates the status of the individual board export task. Possible values: `SUCCESS`: the board export task was completed successfully and the results are available. `ERROR`: the board export task encountered an error and failed to complete. The `errorMessage` field provides more information on the error. `CANCELLED`: the board export task was cancelled. `SCHEDULED`: the board export task has been scheduled and is waiting to be processed. `CREATED`: the board export task was created. + */ + 'status': string + /** + * The date and time when the artifact will no longer be available in the S3 storage. After this time, the link will no longer be valid and the exported files will not be accessible. 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)). + */ + 'artifactExpiredAt'?: Date + /** + * Size of the exported artifact in bytes. + */ + 'sizeInBytes'?: number + /** + * Contains the description of the error that occurred during a board export task. + */ + 'errorMessage'?: string + /** + * Indicates the type of error encountered during the board export task. Possible values: `TEMPORARY`: the board export task encountered a temporary error. Retry the board export task after some time. `FATAL`: the board export failed and cannot be retried. This export will never succeed due to issues such as board corruption, non-existence, or other unrecoverable errors. Please verify the board\'s state or contact support if assistance is needed. `UNKNOWN`: the board export task encountered an unexpected exception. Retry the board export task after some time. + */ + 'errorType'?: string + 'board'?: BoardExportTaskBoard + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'id', + baseName: 'id', + type: 'string', + }, + { + name: 'status', + baseName: 'status', + type: 'string', + }, + { + name: 'artifactExpiredAt', + baseName: 'artifactExpiredAt', + type: 'Date', + }, + { + name: 'sizeInBytes', + baseName: 'sizeInBytes', + type: 'number', + }, + { + name: 'errorMessage', + baseName: 'errorMessage', + type: 'string', + }, + { + name: 'errorType', + baseName: 'errorType', + type: 'string', + }, + { + name: 'board', + baseName: 'board', + type: 'BoardExportTaskBoard', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return BoardExportTask.attributeTypeMap + } +} diff --git a/packages/miro-api/model/boardExportTaskBoard.ts b/packages/miro-api/model/boardExportTaskBoard.ts new file mode 100644 index 000000000..9fdabae9d --- /dev/null +++ b/packages/miro-api/model/boardExportTaskBoard.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 + * Information about a board in the board export task. + */ +export class BoardExportTaskBoard { + /** + * Unique identifier of the board. + */ + 'key'?: string + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'key', + baseName: 'key', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return BoardExportTaskBoard.attributeTypeMap + } +} diff --git a/packages/miro-api/model/boardExportTaskExportLink.ts b/packages/miro-api/model/boardExportTaskExportLink.ts new file mode 100644 index 000000000..76988b6b6 --- /dev/null +++ b/packages/miro-api/model/boardExportTaskExportLink.ts @@ -0,0 +1,84 @@ +/** + * 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 + * Board export task results link. + */ +export class BoardExportTaskExportLink { + /** + * Indicates the status of the individual board export task. Possible values: `SUCCESS`: the board export task was completed successfully and the results are available. `ERROR`: the board export task encountered an error and failed to complete. The `errorMessage` field provides more information on the error. `CANCELLED`: the board export task was cancelled. `SCHEDULED`: the board export task has been scheduled and is waiting to be processed. `CREATED`: the board export task was created. + */ + 'status': string + /** + * URL of the S3 bucket that contains the exported files. + */ + 'exportLink'?: string + /** + * The date and time when the artifact will no longer be available in the S3 storage. After this time, the link will no longer be valid and the exported files will not be accessible. 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)). + */ + 'artifactExpiredAt'?: Date + /** + * The date and time when the export link will expire. After this time, the link will no longer be valid. 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)). + */ + 'linkExpiredAt'?: Date + /** + * Contains the description of the error that occurred during a board export task results link creation. + */ + 'errorMessage'?: string + /** + * Indicates the type of error encountered during the board export task results link creation. Possible values: `TEMPORARY`: the board export task encountered a temporary error. Retry the board export task results link creation after some time. `FATAL`: the board export failed and cannot be retried. This export will never succeed due to issues such as board corruption, non-existence, or other unrecoverable errors. Please verify the board\'s state or contact support if assistance is needed. `UNKNOWN`: the board export task encountered an unexpected exception. Retry the board export task results link creation after some time. + */ + 'errorType'?: string + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'status', + baseName: 'status', + type: 'string', + }, + { + name: 'exportLink', + baseName: 'exportLink', + type: 'string', + }, + { + name: 'artifactExpiredAt', + baseName: 'artifactExpiredAt', + type: 'Date', + }, + { + name: 'linkExpiredAt', + baseName: 'linkExpiredAt', + type: 'Date', + }, + { + name: 'errorMessage', + baseName: 'errorMessage', + type: 'string', + }, + { + name: 'errorType', + baseName: 'errorType', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return BoardExportTaskExportLink.attributeTypeMap + } +} diff --git a/packages/miro-api/model/boardExportTaskResult.ts b/packages/miro-api/model/boardExportTaskResult.ts index fb1f8a162..d471818ed 100644 --- a/packages/miro-api/model/boardExportTaskResult.ts +++ b/packages/miro-api/model/boardExportTaskResult.ts @@ -28,7 +28,7 @@ export class BoardExportTaskResult { */ 'exportLink'?: string /** - * Indicates the status of the individual board export task. Possible values: `SUCCESS`: the board export task was completed successfully and the results are available. `ERROR`: the board export task encountered an error and failed to complete. The `errorMessage` field provides more information on the error. + * Indicates the status of the individual board export task. Possible values: `SUCCESS`: the board export task was completed successfully and the results are available. `ERROR`: the board export task encountered an error and failed to complete. The `errorMessage` field provides more information on the error. `CANCELLED`: the board export task was cancelled. `SCHEDULED`: the board export task has been scheduled and is waiting to be processed. `CREATED`: the board export task was created. */ 'status': string /** diff --git a/packages/miro-api/model/boardFormat.ts b/packages/miro-api/model/boardFormat.ts new file mode 100644 index 000000000..ba74cd220 --- /dev/null +++ b/packages/miro-api/model/boardFormat.ts @@ -0,0 +1,21 @@ +/** + * 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 + * Specifies the format of the file to which the board will be exported. Supported formats include SVG (default), HTML, and PDF. + */ +export enum BoardFormat { + Svg = 'SVG', + Html = 'HTML', + Pdf = 'PDF', +} diff --git a/packages/miro-api/model/boardItemContentLog.ts b/packages/miro-api/model/boardItemContentLog.ts index 86e08e1ca..fd3f6d6fa 100644 --- a/packages/miro-api/model/boardItemContentLog.ts +++ b/packages/miro-api/model/boardItemContentLog.ts @@ -11,6 +11,7 @@ */ import {Actor} from './actor' +import {Relationship} from './relationship' /** * @internal @@ -46,6 +47,10 @@ export class BoardItemContentLog { * Object that contains information about the state of the board item after the action was performed. */ 'state'?: object + /** + * Contains the list of items related to the current board item. + */ + 'relationships'?: Array /** @ignore */ static discriminator: string | undefined = undefined @@ -92,6 +97,11 @@ export class BoardItemContentLog { baseName: 'state', type: 'object', }, + { + name: 'relationships', + baseName: 'relationships', + type: 'Array', + }, ] /** @ignore */ diff --git a/packages/miro-api/model/boardSharingPolicy.ts b/packages/miro-api/model/boardSharingPolicy.ts index 462d11a5a..dd3ff22c6 100644 --- a/packages/miro-api/model/boardSharingPolicy.ts +++ b/packages/miro-api/model/boardSharingPolicy.ts @@ -19,6 +19,10 @@ export class BoardSharingPolicy { * Defines the public-level access to the board. */ 'access'?: string | (typeof BoardSharingPolicy.AccessEnum)[keyof typeof BoardSharingPolicy.AccessEnum] + /** + * Defines if a password is required to access the board. + */ + 'accessPasswordRequired'?: boolean = false /** * Defines the user role when inviting a user via the invite to team and board link. For Enterprise users, the `inviteToAccountAndBoardLinkAccess` parameter is always set to `no_access`. */ @@ -48,6 +52,11 @@ export class BoardSharingPolicy { baseName: 'access', type: 'BoardSharingPolicy.AccessEnum', }, + { + name: 'accessPasswordRequired', + baseName: 'accessPasswordRequired', + type: 'boolean', + }, { name: 'inviteToAccountAndBoardLinkAccess', baseName: 'inviteToAccountAndBoardLinkAccess', diff --git a/packages/miro-api/model/boardUserGroup.ts b/packages/miro-api/model/boardUserGroup.ts new file mode 100644 index 000000000..061606b17 --- /dev/null +++ b/packages/miro-api/model/boardUserGroup.ts @@ -0,0 +1,62 @@ +/** + * 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 BoardUserGroup { + /** + * User group ID. + */ + 'id': string + /** + * Role of the user group in the team. + */ + 'role': string | (typeof BoardUserGroup.RoleEnum)[keyof typeof BoardUserGroup.RoleEnum] = + BoardUserGroup.RoleEnum.Viewer + /** + * Object type + */ + 'type'?: any | null + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'id', + baseName: 'id', + type: 'string', + }, + { + name: 'role', + baseName: 'role', + type: 'BoardUserGroup.RoleEnum', + }, + { + name: 'type', + baseName: 'type', + type: 'any', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return BoardUserGroup.attributeTypeMap + } +} + +export namespace BoardUserGroup { + export const RoleEnum = { + Viewer: 'VIEWER', + Commenter: 'COMMENTER', + Editor: 'EDITOR', + } as const +} diff --git a/packages/miro-api/model/boardUserGroupsPage.ts b/packages/miro-api/model/boardUserGroupsPage.ts new file mode 100644 index 000000000..8610c64bb --- /dev/null +++ b/packages/miro-api/model/boardUserGroupsPage.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 {BoardUserGroup} from './boardUserGroup' + +/** + * @internal + * Page of user groups that with access to the board. + */ +export class BoardUserGroupsPage { + /** + * The maximum number of results to return per call. If the number of project in the response is greater than the limit specified, the response returns the cursor parameter with a value. + */ + 'limit': number = 100 + /** + * 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 = 100 + /** + * List of user groups. + */ + '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 BoardUserGroupsPage.attributeTypeMap + } +} diff --git a/packages/miro-api/model/caseRequest.ts b/packages/miro-api/model/caseRequest.ts index ca7b6574b..e00b02ac1 100644 --- a/packages/miro-api/model/caseRequest.ts +++ b/packages/miro-api/model/caseRequest.ts @@ -12,11 +12,11 @@ export class CaseRequest { /** - * The name of the case + * The name of the case. */ 'name': string /** - * The description of the case + * The description of the case. */ 'description'?: string diff --git a/packages/miro-api/model/caseResponse.ts b/packages/miro-api/model/caseResponse.ts index 605e7edf7..34e78f999 100644 --- a/packages/miro-api/model/caseResponse.ts +++ b/packages/miro-api/model/caseResponse.ts @@ -30,6 +30,7 @@ export class CaseResponse { */ 'description'?: string 'createdBy': User + 'lastModifiedBy'?: User 'createdAt': Date 'lastModifiedAt': Date @@ -63,6 +64,11 @@ export class CaseResponse { baseName: 'createdBy', type: 'User', }, + { + name: 'lastModifiedBy', + baseName: 'lastModifiedBy', + type: 'User', + }, { name: 'createdAt', baseName: 'createdAt', diff --git a/packages/miro-api/model/createBoardExportRequest.ts b/packages/miro-api/model/createBoardExportRequest.ts index 383e6bd2a..948535487 100644 --- a/packages/miro-api/model/createBoardExportRequest.ts +++ b/packages/miro-api/model/createBoardExportRequest.ts @@ -10,6 +10,8 @@ * Do not edit the class manually. */ +import {BoardFormat} from './boardFormat' + /** * @internal * List of board IDs to be exported. @@ -19,13 +21,7 @@ export class CreateBoardExportRequest { * List of board IDs to be exported. */ 'boardIds'?: Array - /** - * Specifies the format of the file to which the board will be exported. Supported formats include SVG (default), HTML, and PDF. - */ - 'boardFormat'?: - | string - | (typeof CreateBoardExportRequest.BoardFormatEnum)[keyof typeof CreateBoardExportRequest.BoardFormatEnum] = - CreateBoardExportRequest.BoardFormatEnum.Svg + 'boardFormat'?: BoardFormat /** @ignore */ static discriminator: string | undefined = undefined @@ -40,7 +36,7 @@ export class CreateBoardExportRequest { { name: 'boardFormat', baseName: 'boardFormat', - type: 'CreateBoardExportRequest.BoardFormatEnum', + type: 'BoardFormat', }, ] @@ -50,10 +46,4 @@ export class CreateBoardExportRequest { } } -export namespace CreateBoardExportRequest { - export const BoardFormatEnum = { - Svg: 'SVG', - Html: 'HTML', - Pdf: 'PDF', - } as const -} +export namespace CreateBoardExportRequest {} diff --git a/packages/miro-api/model/createBoardUserGroupsRequest.ts b/packages/miro-api/model/createBoardUserGroupsRequest.ts new file mode 100644 index 000000000..d47c79e67 --- /dev/null +++ b/packages/miro-api/model/createBoardUserGroupsRequest.ts @@ -0,0 +1,53 @@ +/** + * 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 CreateBoardUserGroupsRequest { + /** + * List of user group ids. + */ + 'userGroupIds': Array + /** + * Role of the user group in the team. + */ + 'role': string | (typeof CreateBoardUserGroupsRequest.RoleEnum)[keyof typeof CreateBoardUserGroupsRequest.RoleEnum] = + CreateBoardUserGroupsRequest.RoleEnum.Viewer + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'userGroupIds', + baseName: 'userGroupIds', + type: 'Array', + }, + { + name: 'role', + baseName: 'role', + type: 'CreateBoardUserGroupsRequest.RoleEnum', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return CreateBoardUserGroupsRequest.attributeTypeMap + } +} + +export namespace CreateBoardUserGroupsRequest { + export const RoleEnum = { + Viewer: 'VIEWER', + Commenter: 'COMMENTER', + Editor: 'EDITOR', + } as const +} diff --git a/packages/miro-api/model/createGroupMemberRequest.ts b/packages/miro-api/model/createGroupMemberRequest.ts new file mode 100644 index 000000000..42138f632 --- /dev/null +++ b/packages/miro-api/model/createGroupMemberRequest.ts @@ -0,0 +1,35 @@ +/** + * 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 CreateGroupMemberRequest { + /** + * User email + */ + 'email': string + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'email', + baseName: 'email', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return CreateGroupMemberRequest.attributeTypeMap + } +} diff --git a/packages/miro-api/model/createGroupRequest.ts b/packages/miro-api/model/createGroupRequest.ts new file mode 100644 index 000000000..f2bf35942 --- /dev/null +++ b/packages/miro-api/model/createGroupRequest.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 CreateGroupRequest { + /** + * User group name. + */ + 'name': string + /** + * Description of the user group being created. + */ + 'description'?: string + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'name', + baseName: 'name', + type: 'string', + }, + { + name: 'description', + baseName: 'description', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return CreateGroupRequest.attributeTypeMap + } +} diff --git a/packages/miro-api/model/createTeamGroupRequest.ts b/packages/miro-api/model/createTeamGroupRequest.ts new file mode 100644 index 000000000..b581437ed --- /dev/null +++ b/packages/miro-api/model/createTeamGroupRequest.ts @@ -0,0 +1,50 @@ +/** + * 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 CreateTeamGroupRequest { + /** + * User group ID. + */ + 'userGroupId': string + /** + * Role of user group in the team. + */ + 'role': string | (typeof CreateTeamGroupRequest.RoleEnum)[keyof typeof CreateTeamGroupRequest.RoleEnum] + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'userGroupId', + baseName: 'userGroupId', + type: 'string', + }, + { + name: 'role', + baseName: 'role', + type: 'CreateTeamGroupRequest.RoleEnum', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return CreateTeamGroupRequest.attributeTypeMap + } +} + +export namespace CreateTeamGroupRequest { + export const RoleEnum = { + Member: 'member', + } as const +} diff --git a/packages/miro-api/model/enterpriseUpdateBoardExportJob200Response.ts b/packages/miro-api/model/enterpriseUpdateBoardExportJob200Response.ts new file mode 100644 index 000000000..5d3a8b530 --- /dev/null +++ b/packages/miro-api/model/enterpriseUpdateBoardExportJob200Response.ts @@ -0,0 +1,34 @@ +/** + * 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 {EnterpriseUpdateBoardExportJob200ResponseStatus} from './enterpriseUpdateBoardExportJob200ResponseStatus' + +export class EnterpriseUpdateBoardExportJob200Response { + 'status': EnterpriseUpdateBoardExportJob200ResponseStatus + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'status', + baseName: 'status', + type: 'EnterpriseUpdateBoardExportJob200ResponseStatus', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return EnterpriseUpdateBoardExportJob200Response.attributeTypeMap + } +} diff --git a/packages/miro-api/model/enterpriseUpdateBoardExportJob200ResponseStatus.ts b/packages/miro-api/model/enterpriseUpdateBoardExportJob200ResponseStatus.ts new file mode 100644 index 000000000..943fe4d4f --- /dev/null +++ b/packages/miro-api/model/enterpriseUpdateBoardExportJob200ResponseStatus.ts @@ -0,0 +1,36 @@ +/** + * 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 {ExportJobStatus} from './exportJobStatus' + +export class EnterpriseUpdateBoardExportJob200ResponseStatus { + 'jobStatus': ExportJobStatus + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'jobStatus', + baseName: 'jobStatus', + type: 'ExportJobStatus', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return EnterpriseUpdateBoardExportJob200ResponseStatus.attributeTypeMap + } +} + +export namespace EnterpriseUpdateBoardExportJob200ResponseStatus {} diff --git a/packages/miro-api/model/enterpriseUpdateBoardExportJobRequest.ts b/packages/miro-api/model/enterpriseUpdateBoardExportJobRequest.ts new file mode 100644 index 000000000..0fb72b72d --- /dev/null +++ b/packages/miro-api/model/enterpriseUpdateBoardExportJobRequest.ts @@ -0,0 +1,43 @@ +/** + * 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 EnterpriseUpdateBoardExportJobRequest { + /** + * Only the `CANCELLED` status is currently supported. + */ + 'status': + | string + | (typeof EnterpriseUpdateBoardExportJobRequest.StatusEnum)[keyof typeof EnterpriseUpdateBoardExportJobRequest.StatusEnum] + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'status', + baseName: 'status', + type: 'EnterpriseUpdateBoardExportJobRequest.StatusEnum', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return EnterpriseUpdateBoardExportJobRequest.attributeTypeMap + } +} + +export namespace EnterpriseUpdateBoardExportJobRequest { + export const StatusEnum = { + Cancelled: 'CANCELLED', + } as const +} diff --git a/packages/miro-api/model/exportJobStatus.ts b/packages/miro-api/model/exportJobStatus.ts new file mode 100644 index 000000000..2ff4567cd --- /dev/null +++ b/packages/miro-api/model/exportJobStatus.ts @@ -0,0 +1,22 @@ +/** + * 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 + * Indicates the current state of the board export job. Possible values: `CREATED`: the job has been created but not yet started. Retry the status call after some time. `IN_PROGRESS`: the job is in progress, and the results are not ready yet. Retry the status call after some time. `CANCELLED`: the job has been cancelled and will not produce any more results. `FINISHED`: the job is complete. You can now get results for the board export job. + */ +export enum ExportJobStatus { + Created = 'CREATED', + InProgress = 'IN_PROGRESS', + Cancelled = 'CANCELLED', + Finished = 'FINISHED', +} diff --git a/packages/miro-api/model/groupMember.ts b/packages/miro-api/model/groupMember.ts new file mode 100644 index 000000000..15466b017 --- /dev/null +++ b/packages/miro-api/model/groupMember.ts @@ -0,0 +1,53 @@ +/** + * 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 GroupMember { + /** + * User ID + */ + 'id': string + /** + * User email + */ + 'email': string + /** + * Object type + */ + 'type': string = 'user-group-member' + + /** @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: 'type', + baseName: 'type', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return GroupMember.attributeTypeMap + } +} diff --git a/packages/miro-api/model/groupMembersPage.ts b/packages/miro-api/model/groupMembersPage.ts new file mode 100644 index 000000000..e5d636cab --- /dev/null +++ b/packages/miro-api/model/groupMembersPage.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 {GroupMember} from './groupMember' + +/** + * @internal + * Page of members that match the search query. + */ +export class GroupMembersPage { + /** + * The maximum number of results to return per call. If the number of project in the response is greater than the limit specified, the response returns the cursor parameter with a value. + */ + 'limit': number = 100 + /** + * 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 = 100 + /** + * List of group members. + */ + '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 GroupMembersPage.attributeTypeMap + } +} diff --git a/packages/miro-api/model/groupTeam.ts b/packages/miro-api/model/groupTeam.ts new file mode 100644 index 000000000..4ab86455a --- /dev/null +++ b/packages/miro-api/model/groupTeam.ts @@ -0,0 +1,59 @@ +/** + * 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 GroupTeam { + /** + * Team ID + */ + 'id': string + /** + * Role of the user group in the team + */ + 'role': string | (typeof GroupTeam.RoleEnum)[keyof typeof GroupTeam.RoleEnum] = GroupTeam.RoleEnum.Member + /** + * Object type + */ + 'type'?: string = 'user-group-team' + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'id', + baseName: 'id', + type: 'string', + }, + { + name: 'role', + baseName: 'role', + type: 'GroupTeam.RoleEnum', + }, + { + name: 'type', + baseName: 'type', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return GroupTeam.attributeTypeMap + } +} + +export namespace GroupTeam { + export const RoleEnum = { + Member: 'member', + } as const +} diff --git a/packages/miro-api/model/groupTeamsPage.ts b/packages/miro-api/model/groupTeamsPage.ts new file mode 100644 index 000000000..03fcb5098 --- /dev/null +++ b/packages/miro-api/model/groupTeamsPage.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 {GroupTeam} from './groupTeam' + +/** + * @internal + * Page of teams that match the search query. + */ +export class GroupTeamsPage { + /** + * The maximum number of results to return per call. If the number of project in the response is greater than the limit specified, the response returns the cursor parameter with a value. + */ + 'limit': number = 100 + /** + * 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 = 100 + /** + * List of teams. + */ + '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 GroupTeamsPage.attributeTypeMap + } +} diff --git a/packages/miro-api/model/groupsPage.ts b/packages/miro-api/model/groupsPage.ts new file mode 100644 index 000000000..fef1bb5e2 --- /dev/null +++ b/packages/miro-api/model/groupsPage.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 {Group} from './group' + +/** + * @internal + * Page of groups that match the search query. + */ +export class GroupsPage { + /** + * The maximum number of results to return per call. If the number of project in the response is greater than the limit specified, the response returns the cursor parameter with a value. + */ + 'limit': number = 100 + /** + * 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 = 100 + /** + * List of groups. + */ + '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 GroupsPage.attributeTypeMap + } +} diff --git a/packages/miro-api/model/legalHoldContentItemsResponse.ts b/packages/miro-api/model/legalHoldContentItemsResponse.ts index c73405e3d..c32a9e617 100644 --- a/packages/miro-api/model/legalHoldContentItemsResponse.ts +++ b/packages/miro-api/model/legalHoldContentItemsResponse.ts @@ -11,10 +11,6 @@ */ export class LegalHoldContentItemsResponse { - /** - * Unique identifier of the content item. - */ - 'id': string /** * Identifier for the piece of content referenced by a content item. In the case of a board, this represents the `boardKey` and can be used to export a board using the Discovery APIs. */ @@ -29,11 +25,6 @@ export class LegalHoldContentItemsResponse { /** @ignore */ static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ - { - name: 'id', - baseName: 'id', - type: 'string', - }, { name: 'contentId', baseName: 'contentId', diff --git a/packages/miro-api/model/legalHoldRequestScope.ts b/packages/miro-api/model/legalHoldRequestScope.ts index 4162531a5..8e5774470 100644 --- a/packages/miro-api/model/legalHoldRequestScope.ts +++ b/packages/miro-api/model/legalHoldRequestScope.ts @@ -15,7 +15,7 @@ import {LegalHoldRequestScopeUsersUsersInner} from './legalHoldRequestScopeUsers /** * @internal - * The legal hold scope determines the criteria used to put content items under hold. The variants of this field might get extended in the future, although the most common use case is to put users under hold. Currently only the `users` scope is supported. However, the parsing of this field must ignore unexpected variants. + * The legal hold scope determines the criteria used to put content items under hold. The variants of this field might get extended in the future, although the most common use case is to put users under hold. Currently only the `users` scope is supported. However, the parsing of this field must ignore unexpected variants. The request must always include a list of all users to be placed under hold, whether it\'s for a new legal hold or an update to an existing one. You can have up to 200 users per legal hold, including users added in legal hold updates. */ export class LegalHoldRequestScope { 'users'?: Array diff --git a/packages/miro-api/model/legalHoldResponse.ts b/packages/miro-api/model/legalHoldResponse.ts index c4d8129ad..d1604c956 100644 --- a/packages/miro-api/model/legalHoldResponse.ts +++ b/packages/miro-api/model/legalHoldResponse.ts @@ -38,6 +38,7 @@ export class LegalHoldResponse { 'state': LegalHoldState 'scope': LegalHoldResponseScope 'createdBy': User + 'lastModifiedBy'?: User 'createdAt': Date 'lastModifiedAt': Date @@ -86,6 +87,11 @@ export class LegalHoldResponse { baseName: 'createdBy', type: 'User', }, + { + name: 'lastModifiedBy', + baseName: 'lastModifiedBy', + type: 'User', + }, { name: 'createdAt', baseName: 'createdAt', diff --git a/packages/miro-api/model/models.ts b/packages/miro-api/model/models.ts index 92fcd0d9e..d8563159f 100644 --- a/packages/miro-api/model/models.ts +++ b/packages/miro-api/model/models.ts @@ -17,15 +17,23 @@ export * from './auditOrganization' export * from './auditPage' export * from './auditTeam' export * from './basicError' -export * from './basicErrorEnterpriseUserSessionResetEnterprisePlan' export * from './basicErrorOrganizationsEnterprisePlan' export * from './board' export * from './boardChanges' export * from './boardDataClassificationLabel' +export * from './boardExportJob' +export * from './boardExportJobCreator' export * from './boardExportJobId' export * from './boardExportJobStatus' +export * from './boardExportJobTasksCount' +export * from './boardExportJobTasksList' +export * from './boardExportJobsList' export * from './boardExportResult' +export * from './boardExportTask' +export * from './boardExportTaskBoard' +export * from './boardExportTaskExportLink' export * from './boardExportTaskResult' +export * from './boardFormat' export * from './boardItemContentLog' export * from './boardLinks' export * from './boardMember' @@ -41,6 +49,8 @@ export * from './boardSharingPolicy' export * from './boardSharingPolicyChange' export * from './boardSubscription' export * from './boardSubscriptionData' +export * from './boardUserGroup' +export * from './boardUserGroupsPage' export * from './boardWithLinks' export * from './boardWithLinksAndLastOpened' export * from './boardWithLinksAndWithoutProject' @@ -66,9 +76,13 @@ export * from './connectorsCursorPaged' export * from './copyBoardChanges' export * from './createBoardExportRequest' export * from './createBoardSubscriptionRequest' +export * from './createBoardUserGroupsRequest' export * from './createDocumentItemUsingFileFromDeviceRequestData' export * from './createFrameItem400Response' +export * from './createGroupMemberRequest' +export * from './createGroupRequest' export * from './createProjectRequest' +export * from './createTeamGroupRequest' export * from './createTeamRequest' export * from './createdBy' export * from './createdByPlatformContainers' @@ -103,6 +117,9 @@ export * from './embedUrlData' export * from './embedUrlDataChanges' export * from './embedUrlDataPlatformbulkcreateoperation' export * from './enterpriseGetOrganizationMembers200Response' +export * from './enterpriseUpdateBoardExportJob200Response' +export * from './enterpriseUpdateBoardExportJob200ResponseStatus' +export * from './enterpriseUpdateBoardExportJobRequest' export * from './error400' export * from './error401' export * from './error403' @@ -110,6 +127,7 @@ export * from './error404' export * from './error409' export * from './error429' export * from './errorResponse' +export * from './exportJobStatus' export * from './fixedRatioGeometry' export * from './fixedRatioGeometryPlatformFileUpload' export * from './fixedRatioNoRotationGeometry' @@ -152,7 +170,12 @@ export * from './getTagsFromItem400Response' export * from './getTagsResponse' export * from './group' export * from './groupData' +export * from './groupMember' +export * from './groupMembersPage' export * from './groupResponseShort' +export * from './groupTeam' +export * from './groupTeamsPage' +export * from './groupsPage' export * from './imageCreateRequest' export * from './imageData' export * from './imageDataResponse' @@ -214,6 +237,8 @@ export * from './organizationMember' export * from './organizationMembersSearchResponse' export * from './pageLinks' export * from './pageLinksPlatformExperimentalFeatures' +export * from './paginatedCaseExportJobsResponse' +export * from './paginatedCaseExportJobsResponseDataInner' export * from './paginatedCaseResponse' export * from './paginatedLegalHoldContentItemsResponse' export * from './paginatedLegalHoldResponse' @@ -233,6 +258,7 @@ export * from './projectPage' export * from './projectRole' export * from './projectRoleToAdd' export * from './projectSettings' +export * from './relationship' export * from './relativeOffset' export * from './revokeTokenRequest' export * from './selfLink' @@ -272,6 +298,8 @@ export * from './teamCollaborationSettings' export * from './teamCollaborationSettingsChanges' export * from './teamCopyAccessLevelSettings' export * from './teamCopyAccessLevelSettingsChanges' +export * from './teamGroup' +export * from './teamGroupsPage' export * from './teamInformation' export * from './teamInvitationSettings' export * from './teamInvitationSettingsChanges' @@ -303,6 +331,7 @@ export * from './updateCardStyle' export * from './updateConnectorStyle' export * from './updateFrameItem409Response' export * from './updateFrameStyle' +export * from './updateGroupRequest' export * from './updateProjectMemberRequest' export * from './updateProjectRequest' export * from './updateProjectSettingsRequest' @@ -310,6 +339,12 @@ export * from './updateShapeStyle' export * from './updateStickyNoteStyle' export * from './updateTeamSettingsRequest' export * from './updateTextStyle' +export * from './updateUserGroupMembersRequest' +export * from './updateUserGroupMembersResultError' +export * from './updateUserGroupMembersResultErrorError' +export * from './updateUserGroupMembersResultInner' +export * from './updateUserGroupMembersResultOperation' +export * from './updateUserGroupMembersResultSuccess' export * from './uploadFileFromDeviceData' export * from './user' export * from './userInfoLastOpenedBy' @@ -352,15 +387,23 @@ import {AuditOrganization} from './auditOrganization' import {AuditPage} from './auditPage' import {AuditTeam} from './auditTeam' import {BasicError} from './basicError' -import {BasicErrorEnterpriseUserSessionResetEnterprisePlan} from './basicErrorEnterpriseUserSessionResetEnterprisePlan' import {BasicErrorOrganizationsEnterprisePlan} from './basicErrorOrganizationsEnterprisePlan' import {Board} from './board' import {BoardChanges} from './boardChanges' import {BoardDataClassificationLabel} from './boardDataClassificationLabel' +import {BoardExportJob} from './boardExportJob' +import {BoardExportJobCreator} from './boardExportJobCreator' import {BoardExportJobId} from './boardExportJobId' import {BoardExportJobStatus} from './boardExportJobStatus' +import {BoardExportJobTasksCount} from './boardExportJobTasksCount' +import {BoardExportJobTasksList} from './boardExportJobTasksList' +import {BoardExportJobsList} from './boardExportJobsList' import {BoardExportResult} from './boardExportResult' +import {BoardExportTask} from './boardExportTask' +import {BoardExportTaskBoard} from './boardExportTaskBoard' +import {BoardExportTaskExportLink} from './boardExportTaskExportLink' import {BoardExportTaskResult} from './boardExportTaskResult' +import {BoardFormat} from './boardFormat' import {BoardItemContentLog} from './boardItemContentLog' import {BoardLinks} from './boardLinks' import {BoardMember} from './boardMember' @@ -376,6 +419,8 @@ import {BoardSharingPolicy} from './boardSharingPolicy' import {BoardSharingPolicyChange} from './boardSharingPolicyChange' import {BoardSubscription} from './boardSubscription' import {BoardSubscriptionData} from './boardSubscriptionData' +import {BoardUserGroup} from './boardUserGroup' +import {BoardUserGroupsPage} from './boardUserGroupsPage' import {BoardWithLinks} from './boardWithLinks' import {BoardWithLinksAndLastOpened} from './boardWithLinksAndLastOpened' import {BoardWithLinksAndWithoutProject} from './boardWithLinksAndWithoutProject' @@ -401,9 +446,13 @@ import {ConnectorsCursorPaged} from './connectorsCursorPaged' import {CopyBoardChanges} from './copyBoardChanges' import {CreateBoardExportRequest} from './createBoardExportRequest' import {CreateBoardSubscriptionRequest} from './createBoardSubscriptionRequest' +import {CreateBoardUserGroupsRequest} from './createBoardUserGroupsRequest' import {CreateDocumentItemUsingFileFromDeviceRequestData} from './createDocumentItemUsingFileFromDeviceRequestData' import {CreateFrameItem400Response} from './createFrameItem400Response' +import {CreateGroupMemberRequest} from './createGroupMemberRequest' +import {CreateGroupRequest} from './createGroupRequest' import {CreateProjectRequest} from './createProjectRequest' +import {CreateTeamGroupRequest} from './createTeamGroupRequest' import {CreateTeamRequest} from './createTeamRequest' import {CreatedBy} from './createdBy' import {CreatedByPlatformContainers} from './createdByPlatformContainers' @@ -438,6 +487,9 @@ import {EmbedUrlData} from './embedUrlData' import {EmbedUrlDataChanges} from './embedUrlDataChanges' import {EmbedUrlDataPlatformbulkcreateoperation} from './embedUrlDataPlatformbulkcreateoperation' import {EnterpriseGetOrganizationMembers200Response} from './enterpriseGetOrganizationMembers200Response' +import {EnterpriseUpdateBoardExportJob200Response} from './enterpriseUpdateBoardExportJob200Response' +import {EnterpriseUpdateBoardExportJob200ResponseStatus} from './enterpriseUpdateBoardExportJob200ResponseStatus' +import {EnterpriseUpdateBoardExportJobRequest} from './enterpriseUpdateBoardExportJobRequest' import {Error400} from './error400' import {Error401} from './error401' import {Error403} from './error403' @@ -445,6 +497,7 @@ import {Error404} from './error404' import {Error409} from './error409' import {Error429} from './error429' import {ErrorResponse} from './errorResponse' +import {ExportJobStatus} from './exportJobStatus' import {FixedRatioGeometry} from './fixedRatioGeometry' import {FixedRatioGeometryPlatformFileUpload} from './fixedRatioGeometryPlatformFileUpload' import {FixedRatioNoRotationGeometry} from './fixedRatioNoRotationGeometry' @@ -487,7 +540,12 @@ import {GetTagsFromItem400Response} from './getTagsFromItem400Response' import {GetTagsResponse} from './getTagsResponse' import {Group} from './group' import {GroupData} from './groupData' +import {GroupMember} from './groupMember' +import {GroupMembersPage} from './groupMembersPage' import {GroupResponseShort} from './groupResponseShort' +import {GroupTeam} from './groupTeam' +import {GroupTeamsPage} from './groupTeamsPage' +import {GroupsPage} from './groupsPage' import {ImageCreateRequest} from './imageCreateRequest' import {ImageData} from './imageData' import {ImageDataResponse} from './imageDataResponse' @@ -549,6 +607,8 @@ import {OrganizationMember} from './organizationMember' import {OrganizationMembersSearchResponse} from './organizationMembersSearchResponse' import {PageLinks} from './pageLinks' import {PageLinksPlatformExperimentalFeatures} from './pageLinksPlatformExperimentalFeatures' +import {PaginatedCaseExportJobsResponse} from './paginatedCaseExportJobsResponse' +import {PaginatedCaseExportJobsResponseDataInner} from './paginatedCaseExportJobsResponseDataInner' import {PaginatedCaseResponse} from './paginatedCaseResponse' import {PaginatedLegalHoldContentItemsResponse} from './paginatedLegalHoldContentItemsResponse' import {PaginatedLegalHoldResponse} from './paginatedLegalHoldResponse' @@ -568,6 +628,7 @@ import {ProjectPage} from './projectPage' import {ProjectRole} from './projectRole' import {ProjectRoleToAdd} from './projectRoleToAdd' import {ProjectSettings} from './projectSettings' +import {Relationship} from './relationship' import {RelativeOffset} from './relativeOffset' import {RevokeTokenRequest} from './revokeTokenRequest' import {SelfLink} from './selfLink' @@ -607,6 +668,8 @@ import {TeamCollaborationSettings} from './teamCollaborationSettings' import {TeamCollaborationSettingsChanges} from './teamCollaborationSettingsChanges' import {TeamCopyAccessLevelSettings} from './teamCopyAccessLevelSettings' import {TeamCopyAccessLevelSettingsChanges} from './teamCopyAccessLevelSettingsChanges' +import {TeamGroup} from './teamGroup' +import {TeamGroupsPage} from './teamGroupsPage' import {TeamInformation} from './teamInformation' import {TeamInvitationSettings} from './teamInvitationSettings' import {TeamInvitationSettingsChanges} from './teamInvitationSettingsChanges' @@ -638,6 +701,7 @@ import {UpdateCardStyle} from './updateCardStyle' import {UpdateConnectorStyle} from './updateConnectorStyle' import {UpdateFrameItem409Response} from './updateFrameItem409Response' import {UpdateFrameStyle} from './updateFrameStyle' +import {UpdateGroupRequest} from './updateGroupRequest' import {UpdateProjectMemberRequest} from './updateProjectMemberRequest' import {UpdateProjectRequest} from './updateProjectRequest' import {UpdateProjectSettingsRequest} from './updateProjectSettingsRequest' @@ -645,6 +709,12 @@ import {UpdateShapeStyle} from './updateShapeStyle' import {UpdateStickyNoteStyle} from './updateStickyNoteStyle' import {UpdateTeamSettingsRequest} from './updateTeamSettingsRequest' import {UpdateTextStyle} from './updateTextStyle' +import {UpdateUserGroupMembersRequest} from './updateUserGroupMembersRequest' +import {UpdateUserGroupMembersResultError} from './updateUserGroupMembersResultError' +import {UpdateUserGroupMembersResultErrorError} from './updateUserGroupMembersResultErrorError' +import {UpdateUserGroupMembersResultInner} from './updateUserGroupMembersResultInner' +import {UpdateUserGroupMembersResultOperation} from './updateUserGroupMembersResultOperation' +import {UpdateUserGroupMembersResultSuccess} from './updateUserGroupMembersResultSuccess' import {UploadFileFromDeviceData} from './uploadFileFromDeviceData' import {User} from './user' import {UserInfoLastOpenedBy} from './userInfoLastOpenedBy' @@ -666,6 +736,7 @@ let enumsMap: {[index: string]: any} = { 'AppCardDataChanges.StatusEnum': AppCardDataChanges.StatusEnum, 'AppCardDataResponse.StatusEnum': AppCardDataResponse.StatusEnum, 'AuditCreatedBy.TypeEnum': AuditCreatedBy.TypeEnum, + BoardFormat: BoardFormat, 'BoardItemContentLog.ActionTypeEnum': BoardItemContentLog.ActionTypeEnum, 'BoardItemContentLog.ItemTypeEnum': BoardItemContentLog.ItemTypeEnum, 'BoardMember.RoleEnum': BoardMember.RoleEnum, @@ -685,6 +756,7 @@ let enumsMap: {[index: string]: any} = { 'BoardSharingPolicyChange.OrganizationAccessEnum': BoardSharingPolicyChange.OrganizationAccessEnum, 'BoardSharingPolicyChange.TeamAccessEnum': BoardSharingPolicyChange.TeamAccessEnum, 'BoardSubscription.StatusEnum': BoardSubscription.StatusEnum, + 'BoardUserGroup.RoleEnum': BoardUserGroup.RoleEnum, 'Caption.TextAlignVerticalEnum': Caption.TextAlignVerticalEnum, 'ConnectorChangesData.ShapeEnum': ConnectorChangesData.ShapeEnum, 'ConnectorCreationData.ShapeEnum': ConnectorCreationData.ShapeEnum, @@ -693,8 +765,9 @@ let enumsMap: {[index: string]: any} = { 'ConnectorStyle.StrokeStyleEnum': ConnectorStyle.StrokeStyleEnum, 'ConnectorStyle.TextOrientationEnum': ConnectorStyle.TextOrientationEnum, 'ConnectorWithLinks.ShapeEnum': ConnectorWithLinks.ShapeEnum, - 'CreateBoardExportRequest.BoardFormatEnum': CreateBoardExportRequest.BoardFormatEnum, 'CreateBoardSubscriptionRequest.StatusEnum': CreateBoardSubscriptionRequest.StatusEnum, + 'CreateBoardUserGroupsRequest.RoleEnum': CreateBoardUserGroupsRequest.RoleEnum, + 'CreateTeamGroupRequest.RoleEnum': CreateTeamGroupRequest.RoleEnum, 'CustomField.IconShapeEnum': CustomField.IconShapeEnum, 'CustomFieldPlatformTags.IconShapeEnum': CustomFieldPlatformTags.IconShapeEnum, 'CustomFieldPlatformbulkcreateoperation.IconShapeEnum': CustomFieldPlatformbulkcreateoperation.IconShapeEnum, @@ -703,6 +776,8 @@ let enumsMap: {[index: string]: any} = { 'EmbedUrlData.ModeEnum': EmbedUrlData.ModeEnum, 'EmbedUrlDataChanges.ModeEnum': EmbedUrlDataChanges.ModeEnum, 'EmbedUrlDataPlatformbulkcreateoperation.ModeEnum': EmbedUrlDataPlatformbulkcreateoperation.ModeEnum, + 'EnterpriseUpdateBoardExportJobRequest.StatusEnum': EnterpriseUpdateBoardExportJobRequest.StatusEnum, + ExportJobStatus: ExportJobStatus, 'FrameChanges.FormatEnum': FrameChanges.FormatEnum, 'FrameChanges.TypeEnum': FrameChanges.TypeEnum, 'FrameData.FormatEnum': FrameData.FormatEnum, @@ -710,6 +785,7 @@ let enumsMap: {[index: string]: any} = { 'FrameDataPlatformContainers.FormatEnum': FrameDataPlatformContainers.FormatEnum, 'FrameDataPlatformContainers.TypeEnum': FrameDataPlatformContainers.TypeEnum, 'GenericSubscription.StatusEnum': GenericSubscription.StatusEnum, + 'GroupTeam.RoleEnum': GroupTeam.RoleEnum, 'ItemConnectionChangesData.SnapToEnum': ItemConnectionChangesData.SnapToEnum, 'ItemConnectionCreationData.SnapToEnum': ItemConnectionCreationData.SnapToEnum, 'ItemDataChanges.StatusEnum': ItemDataChanges.StatusEnum, @@ -770,6 +846,7 @@ let enumsMap: {[index: string]: any} = { 'TeamCopyAccessLevelSettingsChanges.CopyAccessLevelEnum': TeamCopyAccessLevelSettingsChanges.CopyAccessLevelEnum, 'TeamCopyAccessLevelSettingsChanges.CopyAccessLevelLimitationEnum': TeamCopyAccessLevelSettingsChanges.CopyAccessLevelLimitationEnum, + 'TeamGroup.RoleEnum': TeamGroup.RoleEnum, 'TeamInvitationSettings.InviteExternalUsersEnum': TeamInvitationSettings.InviteExternalUsersEnum, 'TeamInvitationSettings.WhoCanInviteEnum': TeamInvitationSettings.WhoCanInviteEnum, 'TeamInvitationSettingsChanges.InviteExternalUsersEnum': TeamInvitationSettingsChanges.InviteExternalUsersEnum, @@ -820,6 +897,7 @@ let enumsMap: {[index: string]: any} = { 'UpdateStickyNoteStyle.TextAlignVerticalEnum': UpdateStickyNoteStyle.TextAlignVerticalEnum, 'UpdateTextStyle.FontFamilyEnum': UpdateTextStyle.FontFamilyEnum, 'UpdateTextStyle.TextAlignEnum': UpdateTextStyle.TextAlignEnum, + UpdateUserGroupMembersResultOperation: UpdateUserGroupMembersResultOperation, 'WidgetDataOutput.ModeEnum': WidgetDataOutput.ModeEnum, 'WidgetDataOutput.StatusEnum': WidgetDataOutput.StatusEnum, 'WidgetDataOutput.ShapeEnum': WidgetDataOutput.ShapeEnum, @@ -847,14 +925,21 @@ let typeMap: {[index: string]: any} = { AuditPage: AuditPage, AuditTeam: AuditTeam, BasicError: BasicError, - BasicErrorEnterpriseUserSessionResetEnterprisePlan: BasicErrorEnterpriseUserSessionResetEnterprisePlan, BasicErrorOrganizationsEnterprisePlan: BasicErrorOrganizationsEnterprisePlan, Board: Board, BoardChanges: BoardChanges, BoardDataClassificationLabel: BoardDataClassificationLabel, + BoardExportJob: BoardExportJob, + BoardExportJobCreator: BoardExportJobCreator, BoardExportJobId: BoardExportJobId, BoardExportJobStatus: BoardExportJobStatus, + BoardExportJobTasksCount: BoardExportJobTasksCount, + BoardExportJobTasksList: BoardExportJobTasksList, + BoardExportJobsList: BoardExportJobsList, BoardExportResult: BoardExportResult, + BoardExportTask: BoardExportTask, + BoardExportTaskBoard: BoardExportTaskBoard, + BoardExportTaskExportLink: BoardExportTaskExportLink, BoardExportTaskResult: BoardExportTaskResult, BoardItemContentLog: BoardItemContentLog, BoardLinks: BoardLinks, @@ -871,6 +956,8 @@ let typeMap: {[index: string]: any} = { BoardSharingPolicyChange: BoardSharingPolicyChange, BoardSubscription: BoardSubscription, BoardSubscriptionData: BoardSubscriptionData, + BoardUserGroup: BoardUserGroup, + BoardUserGroupsPage: BoardUserGroupsPage, BoardWithLinks: BoardWithLinks, BoardWithLinksAndLastOpened: BoardWithLinksAndLastOpened, BoardWithLinksAndWithoutProject: BoardWithLinksAndWithoutProject, @@ -896,9 +983,13 @@ let typeMap: {[index: string]: any} = { CopyBoardChanges: CopyBoardChanges, CreateBoardExportRequest: CreateBoardExportRequest, CreateBoardSubscriptionRequest: CreateBoardSubscriptionRequest, + CreateBoardUserGroupsRequest: CreateBoardUserGroupsRequest, CreateDocumentItemUsingFileFromDeviceRequestData: CreateDocumentItemUsingFileFromDeviceRequestData, CreateFrameItem400Response: CreateFrameItem400Response, + CreateGroupMemberRequest: CreateGroupMemberRequest, + CreateGroupRequest: CreateGroupRequest, CreateProjectRequest: CreateProjectRequest, + CreateTeamGroupRequest: CreateTeamGroupRequest, CreateTeamRequest: CreateTeamRequest, CreatedBy: CreatedBy, CreatedByPlatformContainers: CreatedByPlatformContainers, @@ -934,6 +1025,9 @@ let typeMap: {[index: string]: any} = { EmbedUrlDataChanges: EmbedUrlDataChanges, EmbedUrlDataPlatformbulkcreateoperation: EmbedUrlDataPlatformbulkcreateoperation, EnterpriseGetOrganizationMembers200Response: EnterpriseGetOrganizationMembers200Response, + EnterpriseUpdateBoardExportJob200Response: EnterpriseUpdateBoardExportJob200Response, + EnterpriseUpdateBoardExportJob200ResponseStatus: EnterpriseUpdateBoardExportJob200ResponseStatus, + EnterpriseUpdateBoardExportJobRequest: EnterpriseUpdateBoardExportJobRequest, Error400: Error400, Error401: Error401, Error403: Error403, @@ -983,7 +1077,12 @@ let typeMap: {[index: string]: any} = { GetTagsResponse: GetTagsResponse, Group: Group, GroupData: GroupData, + GroupMember: GroupMember, + GroupMembersPage: GroupMembersPage, GroupResponseShort: GroupResponseShort, + GroupTeam: GroupTeam, + GroupTeamsPage: GroupTeamsPage, + GroupsPage: GroupsPage, ImageCreateRequest: ImageCreateRequest, ImageData: ImageData, ImageDataResponse: ImageDataResponse, @@ -1044,6 +1143,8 @@ let typeMap: {[index: string]: any} = { OrganizationMembersSearchResponse: OrganizationMembersSearchResponse, PageLinks: PageLinks, PageLinksPlatformExperimentalFeatures: PageLinksPlatformExperimentalFeatures, + PaginatedCaseExportJobsResponse: PaginatedCaseExportJobsResponse, + PaginatedCaseExportJobsResponseDataInner: PaginatedCaseExportJobsResponseDataInner, PaginatedCaseResponse: PaginatedCaseResponse, PaginatedLegalHoldContentItemsResponse: PaginatedLegalHoldContentItemsResponse, PaginatedLegalHoldResponse: PaginatedLegalHoldResponse, @@ -1062,6 +1163,7 @@ let typeMap: {[index: string]: any} = { ProjectMemberPage: ProjectMemberPage, ProjectPage: ProjectPage, ProjectSettings: ProjectSettings, + Relationship: Relationship, RelativeOffset: RelativeOffset, RevokeTokenRequest: RevokeTokenRequest, SelfLink: SelfLink, @@ -1100,6 +1202,8 @@ let typeMap: {[index: string]: any} = { TeamCollaborationSettingsChanges: TeamCollaborationSettingsChanges, TeamCopyAccessLevelSettings: TeamCopyAccessLevelSettings, TeamCopyAccessLevelSettingsChanges: TeamCopyAccessLevelSettingsChanges, + TeamGroup: TeamGroup, + TeamGroupsPage: TeamGroupsPage, TeamInformation: TeamInformation, TeamInvitationSettings: TeamInvitationSettings, TeamInvitationSettingsChanges: TeamInvitationSettingsChanges, @@ -1131,6 +1235,7 @@ let typeMap: {[index: string]: any} = { UpdateConnectorStyle: UpdateConnectorStyle, UpdateFrameItem409Response: UpdateFrameItem409Response, UpdateFrameStyle: UpdateFrameStyle, + UpdateGroupRequest: UpdateGroupRequest, UpdateProjectMemberRequest: UpdateProjectMemberRequest, UpdateProjectRequest: UpdateProjectRequest, UpdateProjectSettingsRequest: UpdateProjectSettingsRequest, @@ -1138,6 +1243,11 @@ let typeMap: {[index: string]: any} = { UpdateStickyNoteStyle: UpdateStickyNoteStyle, UpdateTeamSettingsRequest: UpdateTeamSettingsRequest, UpdateTextStyle: UpdateTextStyle, + UpdateUserGroupMembersRequest: UpdateUserGroupMembersRequest, + UpdateUserGroupMembersResultError: UpdateUserGroupMembersResultError, + UpdateUserGroupMembersResultErrorError: UpdateUserGroupMembersResultErrorError, + UpdateUserGroupMembersResultInner: UpdateUserGroupMembersResultInner, + UpdateUserGroupMembersResultSuccess: UpdateUserGroupMembersResultSuccess, UploadFileFromDeviceData: UploadFileFromDeviceData, User: User, UserInfoLastOpenedBy: UserInfoLastOpenedBy, diff --git a/packages/miro-api/model/paginatedCaseExportJobsResponse.ts b/packages/miro-api/model/paginatedCaseExportJobsResponse.ts new file mode 100644 index 000000000..74b46b455 --- /dev/null +++ b/packages/miro-api/model/paginatedCaseExportJobsResponse.ts @@ -0,0 +1,74 @@ +/** + * 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 {PaginatedCaseExportJobsResponseDataInner} from './paginatedCaseExportJobsResponseDataInner' + +/** + * @internal + * Board export job for a case. + */ +export class PaginatedCaseExportJobsResponse { + /** + * 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 + /** + * 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 + /** + * The maximum number of results to return per call. If the number of project in the response is greater than the limit specified, the response returns the cursor parameter with a value. + */ + 'limit'?: number = 100 + /** + * Type of the response, in this case it\'s always \'cursor-list\'. + */ + 'type'?: string = 'cursor-list' + 'data'?: Array + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'size', + baseName: 'size', + type: 'number', + }, + { + name: 'cursor', + baseName: 'cursor', + type: 'string', + }, + { + name: 'limit', + baseName: 'limit', + type: 'number', + }, + { + name: 'type', + baseName: 'type', + type: 'string', + }, + { + name: 'data', + baseName: 'data', + type: 'Array', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return PaginatedCaseExportJobsResponse.attributeTypeMap + } +} diff --git a/packages/miro-api/model/paginatedCaseExportJobsResponseDataInner.ts b/packages/miro-api/model/paginatedCaseExportJobsResponseDataInner.ts new file mode 100644 index 000000000..609684a5b --- /dev/null +++ b/packages/miro-api/model/paginatedCaseExportJobsResponseDataInner.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 + * Board export job. + */ +export class PaginatedCaseExportJobsResponseDataInner { + /** + * Unique identifier of the board export job. + */ + 'id'?: string + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'id', + baseName: 'id', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return PaginatedCaseExportJobsResponseDataInner.attributeTypeMap + } +} diff --git a/packages/miro-api/model/relationship.ts b/packages/miro-api/model/relationship.ts new file mode 100644 index 000000000..c26cfc47e --- /dev/null +++ b/packages/miro-api/model/relationship.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 + * Object that contains information about a related board item for the current item. + */ +export class Relationship { + /** + * Indicates the relationship of this item with the current item. For example, if `type` returns `parent`, this means that related item is a parent for the current item. + */ + 'type'?: string + /** + * Indicates the type of the related board item. For example, if `itemType` returns `widget`, this means that related item is a widget. + */ + 'itemType'?: string + /** + * Unique identifier of the related board item. + */ + 'itemId'?: string + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'type', + baseName: 'type', + type: 'string', + }, + { + name: 'itemType', + baseName: 'itemType', + type: 'string', + }, + { + name: 'itemId', + baseName: 'itemId', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return Relationship.attributeTypeMap + } +} diff --git a/packages/miro-api/model/teamGroup.ts b/packages/miro-api/model/teamGroup.ts new file mode 100644 index 000000000..a1b984178 --- /dev/null +++ b/packages/miro-api/model/teamGroup.ts @@ -0,0 +1,59 @@ +/** + * 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 TeamGroup { + /** + * User group ID. + */ + 'id': string + /** + * Role of the user group in the team. + */ + 'role': string | (typeof TeamGroup.RoleEnum)[keyof typeof TeamGroup.RoleEnum] = TeamGroup.RoleEnum.Member + /** + * Object type + */ + 'type'?: string = 'team-user-group' + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'id', + baseName: 'id', + type: 'string', + }, + { + name: 'role', + baseName: 'role', + type: 'TeamGroup.RoleEnum', + }, + { + name: 'type', + baseName: 'type', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return TeamGroup.attributeTypeMap + } +} + +export namespace TeamGroup { + export const RoleEnum = { + Member: 'member', + } as const +} diff --git a/packages/miro-api/model/teamGroupsPage.ts b/packages/miro-api/model/teamGroupsPage.ts new file mode 100644 index 000000000..675982ee5 --- /dev/null +++ b/packages/miro-api/model/teamGroupsPage.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 {TeamGroup} from './teamGroup' + +/** + * @internal + * Page of groups that match the search query. + */ +export class TeamGroupsPage { + /** + * The maximum number of results to return per call. If the number of project in the response is greater than the limit specified, the response returns the cursor parameter with a value. + */ + 'limit': number = 100 + /** + * 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 = 100 + /** + * List of groups. + */ + '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 TeamGroupsPage.attributeTypeMap + } +} diff --git a/packages/miro-api/model/teamMember.ts b/packages/miro-api/model/teamMember.ts index 29776b367..ef7b2862e 100644 --- a/packages/miro-api/model/teamMember.ts +++ b/packages/miro-api/model/teamMember.ts @@ -16,7 +16,7 @@ export class TeamMember { */ 'id': string /** - * Role of the team member. * \"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\": Team-guest user, user with access only to a team without access to organization. + * Role of the team member. * \"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. */ 'role': string | (typeof TeamMember.RoleEnum)[keyof typeof TeamMember.RoleEnum] /** @@ -102,6 +102,5 @@ export namespace TeamMember { NonTeam: 'non_team', Member: 'member', Admin: 'admin', - TeamGuest: 'team_guest', } as const } diff --git a/packages/miro-api/model/teamMemberChanges.ts b/packages/miro-api/model/teamMemberChanges.ts index 6a3371f75..7a926ae14 100644 --- a/packages/miro-api/model/teamMemberChanges.ts +++ b/packages/miro-api/model/teamMemberChanges.ts @@ -12,7 +12,7 @@ export class TeamMemberChanges { /** - * Role of the team member. * \"member\": Team member with full member permissions. * \"admin\": Admin of a team. Team member with permission to manage team. * \"team_guest\": Team-guest user, user with access only to a team without access to organization. + * Role of the team member. * \"member\": Team member with full member permissions. * \"admin\": Admin of a team. Team member with permission to manage team. */ 'role'?: string | (typeof TeamMemberChanges.RoleEnum)[keyof typeof TeamMemberChanges.RoleEnum] @@ -38,6 +38,5 @@ export namespace TeamMemberChanges { export const RoleEnum = { Member: 'member', Admin: 'admin', - TeamGuest: 'team_guest', } as const } diff --git a/packages/miro-api/model/teamMemberInvite.ts b/packages/miro-api/model/teamMemberInvite.ts index 36a24cfba..49db6e1e9 100644 --- a/packages/miro-api/model/teamMemberInvite.ts +++ b/packages/miro-api/model/teamMemberInvite.ts @@ -16,7 +16,7 @@ export class TeamMemberInvite { */ 'email': string /** - * Role of the team member. * \"member\": Team member with full member permissions. * \"admin\": Admin of a team. Team member with permission to manage team. * \"team_guest\": Team-guest user, user with access only to a team without access to organization. + * Role of the team member. * \"member\": Team member with full member permissions. * \"admin\": Admin of a team. Team member with permission to manage team. */ 'role'?: string | (typeof TeamMemberInvite.RoleEnum)[keyof typeof TeamMemberInvite.RoleEnum] @@ -47,6 +47,5 @@ export namespace TeamMemberInvite { export const RoleEnum = { Member: 'member', Admin: 'admin', - TeamGuest: 'team_guest', } as const } diff --git a/packages/miro-api/model/teamSharingPolicySettings.ts b/packages/miro-api/model/teamSharingPolicySettings.ts index bc147726f..945982f4d 100644 --- a/packages/miro-api/model/teamSharingPolicySettings.ts +++ b/packages/miro-api/model/teamSharingPolicySettings.ts @@ -56,7 +56,7 @@ export class TeamSharingPolicySettings { | string | (typeof TeamSharingPolicySettings.MoveBoardToAccountEnum)[keyof typeof TeamSharingPolicySettings.MoveBoardToAccountEnum] /** - * * \"enabled\": Enabled. Restrict to listed domain. * \"disabled\": Disabled. No domain restriction. * \"enabled_with_external_users_access\": Enabled. Restrict to listed domain but allows external users to access. + * * \"enabled\": Enabled. Restrict to listed domain. * \"disabled\": Disabled. No domain restriction. * \"enabled_with_external_user_access\": Enabled. Restrict to listed domain but allows external users to access. */ 'restrictAllowedDomains'?: | string diff --git a/packages/miro-api/model/teamSharingPolicySettingsChanges.ts b/packages/miro-api/model/teamSharingPolicySettingsChanges.ts index 022b0b75c..5679e1887 100644 --- a/packages/miro-api/model/teamSharingPolicySettingsChanges.ts +++ b/packages/miro-api/model/teamSharingPolicySettingsChanges.ts @@ -57,7 +57,7 @@ export class TeamSharingPolicySettingsChanges { | string | (typeof TeamSharingPolicySettingsChanges.MoveBoardToAccountEnum)[keyof typeof TeamSharingPolicySettingsChanges.MoveBoardToAccountEnum] /** - * * \"enabled\": Enabled. Restrict to listed domain. * \"disabled\": Disabled. No domain restriction. * \"enabled_with_external_users_access\": Enabled. Restrict to listed domain but allows external users to access. + * * \"enabled\": Enabled. Restrict to listed domain. * \"disabled\": Disabled. No domain restriction. * \"enabled_with_external_user_access\": Enabled. Restrict to listed domain but allows external users to access. */ 'restrictAllowedDomains'?: | string diff --git a/packages/miro-api/model/updateGroupRequest.ts b/packages/miro-api/model/updateGroupRequest.ts new file mode 100644 index 000000000..0fe6b2d15 --- /dev/null +++ b/packages/miro-api/model/updateGroupRequest.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 UpdateGroupRequest { + /** + * New name for the user group being updated. + */ + 'name'?: string + /** + * New description of the user group. + */ + 'description'?: string + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'name', + baseName: 'name', + type: 'string', + }, + { + name: 'description', + baseName: 'description', + type: 'string', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return UpdateGroupRequest.attributeTypeMap + } +} diff --git a/packages/miro-api/model/updateUserGroupMembersRequest.ts b/packages/miro-api/model/updateUserGroupMembersRequest.ts new file mode 100644 index 000000000..ad1a8956b --- /dev/null +++ b/packages/miro-api/model/updateUserGroupMembersRequest.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 UpdateUserGroupMembersRequest { + /** + * List of user emails to add to the user group. + */ + 'membersToAdd'?: Array + /** + * List of user emails to remove from the user group. + */ + 'membersToRemove'?: Array + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'membersToAdd', + baseName: 'membersToAdd', + type: 'Array', + }, + { + name: 'membersToRemove', + baseName: 'membersToRemove', + type: 'Array', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return UpdateUserGroupMembersRequest.attributeTypeMap + } +} diff --git a/packages/miro-api/model/updateUserGroupMembersResultError.ts b/packages/miro-api/model/updateUserGroupMembersResultError.ts new file mode 100644 index 000000000..9b874acc0 --- /dev/null +++ b/packages/miro-api/model/updateUserGroupMembersResultError.ts @@ -0,0 +1,52 @@ +/** + * 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 {UpdateUserGroupMembersResultErrorError} from './updateUserGroupMembersResultErrorError' +import {UpdateUserGroupMembersResultOperation} from './updateUserGroupMembersResultOperation' + +export class UpdateUserGroupMembersResultError { + 'operation'?: UpdateUserGroupMembersResultOperation + /** + * The HTTP status code for the successful operation. + */ + 'status'?: number + 'error'?: UpdateUserGroupMembersResultErrorError + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'operation', + baseName: 'operation', + type: 'UpdateUserGroupMembersResultOperation', + }, + { + name: 'status', + baseName: 'status', + type: 'number', + }, + { + name: 'error', + baseName: 'error', + type: 'UpdateUserGroupMembersResultErrorError', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return UpdateUserGroupMembersResultError.attributeTypeMap + } +} + +export namespace UpdateUserGroupMembersResultError {} diff --git a/packages/miro-api/model/basicErrorEnterpriseUserSessionResetEnterprisePlan.ts b/packages/miro-api/model/updateUserGroupMembersResultErrorError.ts similarity index 87% rename from packages/miro-api/model/basicErrorEnterpriseUserSessionResetEnterprisePlan.ts rename to packages/miro-api/model/updateUserGroupMembersResultErrorError.ts index 5386f459a..13ce7b261 100644 --- a/packages/miro-api/model/basicErrorEnterpriseUserSessionResetEnterprisePlan.ts +++ b/packages/miro-api/model/updateUserGroupMembersResultErrorError.ts @@ -10,15 +10,9 @@ * Do not edit the class manually. */ -export class BasicErrorEnterpriseUserSessionResetEnterprisePlan { - /** - * HTTP status code. - */ - 'status'?: number - /** - * Description of the status code. - */ - 'code'?: string +export class UpdateUserGroupMembersResultErrorError { + 'status'?: any | null + 'code'?: any | null /** * Explanation for the error */ @@ -36,12 +30,12 @@ export class BasicErrorEnterpriseUserSessionResetEnterprisePlan { { name: 'status', baseName: 'status', - type: 'number', + type: 'any', }, { name: 'code', baseName: 'code', - type: 'string', + type: 'any', }, { name: 'message', @@ -57,6 +51,6 @@ export class BasicErrorEnterpriseUserSessionResetEnterprisePlan { /** @ignore */ static getAttributeTypeMap() { - return BasicErrorEnterpriseUserSessionResetEnterprisePlan.attributeTypeMap + return UpdateUserGroupMembersResultErrorError.attributeTypeMap } } diff --git a/packages/miro-api/model/updateUserGroupMembersResultInner.ts b/packages/miro-api/model/updateUserGroupMembersResultInner.ts new file mode 100644 index 000000000..052b389fa --- /dev/null +++ b/packages/miro-api/model/updateUserGroupMembersResultInner.ts @@ -0,0 +1,61 @@ +/** + * 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 {GroupMember} from './groupMember' +import {UpdateUserGroupMembersResultError} from './updateUserGroupMembersResultError' +import {UpdateUserGroupMembersResultErrorError} from './updateUserGroupMembersResultErrorError' +import {UpdateUserGroupMembersResultOperation} from './updateUserGroupMembersResultOperation' +import {UpdateUserGroupMembersResultSuccess} from './updateUserGroupMembersResultSuccess' + +export class UpdateUserGroupMembersResultInner { + 'operation'?: UpdateUserGroupMembersResultOperation + /** + * The HTTP status code for the successful operation. + */ + 'status'?: number + 'affectedUsers'?: Array + 'error'?: UpdateUserGroupMembersResultErrorError + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'operation', + baseName: 'operation', + type: 'UpdateUserGroupMembersResultOperation', + }, + { + name: 'status', + baseName: 'status', + type: 'number', + }, + { + name: 'affectedUsers', + baseName: 'affectedUsers', + type: 'Array', + }, + { + name: 'error', + baseName: 'error', + type: 'UpdateUserGroupMembersResultErrorError', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return UpdateUserGroupMembersResultInner.attributeTypeMap + } +} + +export namespace UpdateUserGroupMembersResultInner {} diff --git a/packages/miro-api/model/updateUserGroupMembersResultOperation.ts b/packages/miro-api/model/updateUserGroupMembersResultOperation.ts new file mode 100644 index 000000000..c342e0537 --- /dev/null +++ b/packages/miro-api/model/updateUserGroupMembersResultOperation.ts @@ -0,0 +1,20 @@ +/** + * 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 + * The name of the operation that was performed. + */ +export enum UpdateUserGroupMembersResultOperation { + AddMembers = 'addMembers', + RemoveMembers = 'removeMembers', +} diff --git a/packages/miro-api/model/updateUserGroupMembersResultSuccess.ts b/packages/miro-api/model/updateUserGroupMembersResultSuccess.ts new file mode 100644 index 000000000..1309df3df --- /dev/null +++ b/packages/miro-api/model/updateUserGroupMembersResultSuccess.ts @@ -0,0 +1,52 @@ +/** + * 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 {GroupMember} from './groupMember' +import {UpdateUserGroupMembersResultOperation} from './updateUserGroupMembersResultOperation' + +export class UpdateUserGroupMembersResultSuccess { + 'operation'?: UpdateUserGroupMembersResultOperation + /** + * The HTTP status code for the successful operation. + */ + 'status'?: number + 'affectedUsers'?: Array + + /** @ignore */ + static discriminator: string | undefined = undefined + + /** @ignore */ + static attributeTypeMap: Array<{name: string; baseName: string; type: string}> = [ + { + name: 'operation', + baseName: 'operation', + type: 'UpdateUserGroupMembersResultOperation', + }, + { + name: 'status', + baseName: 'status', + type: 'number', + }, + { + name: 'affectedUsers', + baseName: 'affectedUsers', + type: 'Array', + }, + ] + + /** @ignore */ + static getAttributeTypeMap() { + return UpdateUserGroupMembersResultSuccess.attributeTypeMap + } +} + +export namespace UpdateUserGroupMembersResultSuccess {}