# Canvas - **OpenAPI Version:** `3.1.1` - **API Version:** `2` Zoom Docs ## Servers - **URL:** `https://api.zoom.us/v2` ## Operations ### Download archive attachments - **Method:** `GET` - **Path:** `/docs/archive_attachments` - **Tags:** Archiving Batch retrieve download URLs for attachments in archived files. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_archiving:read:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:read:archive:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` **Not supported in Gov cluster** #### Responses ##### Status: 200 Returns a list of attachments with their download URLs or failure reasons. ###### Content-Type: application/json - **`attachments`** `array` — List of attachments with their download URLs or failure reasons. **Items:** - **`attachment_id` (required)** `string` — The attachment ID. - **`download_url`** `string` — The signed download URL for the attachment, valid for 1 hour. Empty if the download URL could not be retrieved. - **`failed_reason`** `string` — The reason for failure if the download URL could not be retrieved. Empty if the download URL was successfully retrieved. **Example:** ```json { "attachments": [ { "attachment_id": "QISQ2bgbSpmjiFFee4XExB", "download_url": "https://example.com/download/document.pdf", "failed_reason": "The resource does not exist." } ] } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request Invalid parameters. ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### List doc archive data - **Method:** `GET` - **Path:** `/docs/archives` - **Tags:** Archiving List archived documents for a given account within a specified time range. Each archive record includes a `download_url` for downloading the complete archived content as a **JSON** file. See the `download_url` field description for the full JSON schema definition. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_archiving:read:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:read:archive:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` **Not supported in Gov cluster** #### Responses ##### Status: 200 The returned archived files list. ###### Content-Type: application/json - **`from` (required)** `string`, format: `date-time` — The queried start date. - **`next_page_token` (required)** `string` — The next page token paginates through a large set of results. A next page token returns whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes. - **`page_size` (required)** `integer`, format: `int32` — The number of records returned per page in a single API call. - **`to` (required)** `string`, format: `date-time` — The queried end date. - **`total_records` (required)** `integer` — The total number of returned sessions records. - **`data`** `array` — List of archive detail records under this account. **Items:** - **`archive_time` (required)** `string`, format: `date-time` — The time when this archive was created, in RFC 3339 format. - **`download_url` (required)** `string` — The download URL contains the complete archived content of this version and is valid for 1 hour. Please access and download it within the validity period. The downloaded content is a \*\*JSON\*\* object which contains the following structure: \*\*Archive Download Content Schema\*\* The JSON schema definition for the content downloaded from the \`download\_url\` returned in archive records. Each archive is a complete point-in-time snapshot of a Zoom document, including its Markdown content, comments, reactions, user information, file metadata, and attachment references. The file is served as \`application/json\` and the download URL is valid for 1 hour. ## Top-Level Fields | Field | Type | Required | Description | |-------|------|----------|-------------| | \`file\_id\` | string | Yes | Unique identifier of the archived document | | \`version\` | integer | Yes | Archive version number (monotonically increasing per file) | | \`product\` | string | Yes | Product type of the archived document. Values: \`docs\`, \`my\_notes\`, \`meeting\_summary\` | | \`trigger\_type\` | string | Yes | Event that triggered this archive. Values: \`doc\_edit\`, \`doc\_create\`, \`doc\_view\`, \`comment\_change\` | | \`archive\_time\` | string | Yes | Document archived time in RFC 3339 format | | \`file\_metadata\` | object | No | Document metadata snapshot at archive time. Structure defined in \*\*FileMetadata\*\* below | | \`page\_cover\` | string | No | Page cover image URL | | \`page\_icon\` | string | No | Page icon (emoji or URL) | | \`operator\` | object | No | User who triggered this archive event. Structure defined in \*\*UserInfo\*\* below | | \`markdown\` | string | Yes | Full document content exported as Markdown | | \`threads\` | array | No | Comment threads on the document. Each element follows the \*\*Thread\*\* structure below | | \`page\_reactions\` | array | No | Page-level reactions (e.g., emoji reactions on the document). Each element follows the \*\*PageReaction\*\* structure below | | \`users\` | object | No | Map of \`user\_id\` → user info for all users referenced in this archive. Each value follows the \*\*UserInfo\*\* structure below | | \`attachments\` | array | No | Document-level attachment metadata. Each element follows the \*\*Attachment\*\* structure below | ## Nested Object Definitions ### FileMetadata Snapshot of document properties at the time of archiving. | Field | Type | Required | Description | |-------|------|----------|-------------| | \`title\` | string | Yes | Document title | | \`owner\_id\` | string | Yes | User ID of the document owner | | \`owner\_name\` | string | Yes | Display name of the document owner | | \`owner\_email\` | string | No | Email address of the document owner | | \`create\_time\` | string | Yes | Document creation time in RFC 3339 format | | \`last\_edit\_time\` | string | Yes | Last edit time in RFC 3339 format | | \`is\_deleted\` | boolean | Yes | Whether the document was deleted at archive time | | \`delete\_time\` | string | No | Deletion time in RFC 3339 format. Present only if \`is\_deleted\` is true | ### UserInfo User identity information. Used in \`operator\` field and \`users\` map. | Field | Type | Required | Description | |-------|------|----------|-------------| | \`user\_id\` | string | Yes | Unique user identifier | | \`display\_name\` | string | Yes | User's display name | | \`email\` | string | No | User's email address | ### Thread A comment thread attached to a specific location in the document. | Field | Type | Required | Description | |-------|------|----------|-------------| | \`thread\_id\` | string | Yes | Unique thread identifier | | \`root\_block\_id\` | string | Yes | Block ID where the thread is anchored | | \`block\_ids\` | array of string | No | Additional block IDs related to the thread | | \`selected\_content\` | string | No | The selected text that the comment is attached to | | \`comment\_type\_name\` | string | Yes | Comment type. Accepted values: \`block\`, \`page\` ,\`discussion\`, \`suggestion\` | | \`thread\_status\` | string | Yes | Thread status. Values: \`open\`, \`resolved\` | | \`comment\_count\` | integer | Yes | Number of comments in this thread | | \`created\_by\` | string | Yes | User ID who created the thread | | \`updated\_by\` | string | No | User ID who last updated the thread | | \`create\_time\` | string | Yes | Thread creation time in RFC 3339 format | | \`modify\_time\` | string | Yes | Last modification time in RFC 3339 format | | \`resolve\_time\` | string | No | Time when the thread was resolved in RFC 3339 format | | \`latest\_comment\_create\_time\` | string | Yes | Creation time of the most recent comment in RFC 3339 format | | \`comments\` | array | No | List of comments in this thread. Each element follows the \*\*Comment\*\* structure below | | \`is\_deleted\` | boolean | No | Whether the thread has been deleted | | \`delete\_time\` | string | No | Deletion time in RFC 3339 format | ### Comment An individual comment within a thread. | Field | Type | Required | Description | |-------|------|----------|-------------| | \`comment\_id\` | string | Yes | Unique comment identifier | | \`thread\_id\` | string | Yes | Parent thread identifier | | \`root\_block\_id\` | string | Yes | Block ID where the comment is anchored | | \`parent\_id\` | string | No | Parent comment ID (for nested replies) | | \`content\_plain\_text\` | string | Yes | Plain text content of the comment | | \`attachments\` | array | No | Attachments on this comment. Each element follows the \*\*Attachment\*\* structure below | | \`created\_by\` | string | Yes | User ID who created the comment | | \`updated\_by\` | string | No | User ID who last edited the comment | | \`is\_edited\` | boolean | Yes | Whether the comment has been edited | | \`create\_time\` | string | Yes | Comment creation time in RFC 3339 format | | \`modify\_time\` | string | Yes | Last modification time in RFC 3339 format | | \`reactions\` | array | No | Reactions on this comment. Each element follows the \*\*Reaction\*\* structure below | | \`is\_deleted\` | boolean | No | Whether the comment has been deleted | | \`delete\_time\` | string | No | Deletion time in RFC 3339 format | ### Reaction An emoji reaction on a comment. | Field | Type | Required | Description | |-------|------|----------|-------------| | \`reaction\_id\` | string | Yes | Unique reaction identifier | | \`comment\_id\` | string | Yes | Comment this reaction belongs to | | \`reaction\` | string | Yes | Emoji value| | \`created\_by\` | string | Yes | User ID who added the reaction | | \`create\_time\` | string | Yes | Reaction creation time in RFC 3339 format | ### PageReaction An emoji reaction on the document itself. | Field | Type | Required | Description | |-------|------|----------|-------------| | \`reaction\_id\` | string | Yes | Unique reaction identifier | | \`reaction\` | string | Yes | Emoji value| | \`reaction\_type\` | integer | Yes | Reaction type. \`1\` = block-level reaction, \`2\` = page-level reaction | | \`created\_by\` | string | Yes | User ID who added the reaction | | \`create\_time\` | string | Yes | Reaction creation time in RFC 3339 format | ### Attachment Basic metadata for a file attachment embedded in the document or comment. To download the actual attachment file, use the \`Download Archive Attachments\` OpenAPI with the \`attachment\_id\`. | Field | Type | Required | Description | |-------|------|----------|-------------| | \`attachment\_id\` | string | Yes | Unique attachment identifier. | | \`name\` | string | Yes | Attachment name | | \`type\` | string | Yes | MIME type (e.g., \`image/png\`, \`application/pdf\`) | | \`size\` | integer | Yes | File size in bytes | ## JSON Example \`\`\`json { "file\_id": "zD83pVKRS2WrCBFHsfPMng", "version": 3, "product": "docs", "trigger\_type": "comment\_change", "archive\_time": "2026-04-09T08:34:23Z", "file\_metadata": { "title": "Q1 Project Plan", "owner\_id": "OnsTZFMpTUWD\_YTo2Z\_3Lg", "owner\_name": "Alice Johnson", "owner\_email": "alice.johnson\@example.com", "create\_time": "2026-01-15T09:00:00Z", "last\_edit\_time": "2026-04-09T08:30:00Z", "is\_deleted": false }, "page\_cover": "https\://example.com/covers/q1-plan.png", "page\_icon": "📋", "operator": { "user\_id": "KxR4mWVeQdGt7Lp1Nf\_08w", "display\_name": "Bob Smith", "email": "bob.smith\@example.com" }, "markdown": "# Q1 Project Plan\n\n## Goals\n\n- Launch feature A\n- Complete migration B\n\n## Timeline\n\n| Phase | Date |\n|-------|------|\n| Design | Jan 15 |\n| Dev | Feb 1 |\n| QA | Feb 20 |\n", "threads": \[ { "thread\_id": "a084b2c7874c42ce9fe5b976160a332d", "root\_block\_id": "5a10e3c540dc4914ae7c846fa497f183", "block\_ids": \["5a10e3c540dc4914ae7c846fa497f183"], "selected\_content": "Launch feature A", "comment\_type\_name": "block", "thread\_status": "open", "comment\_count": 2, "created\_by": "Hj2sNkLdS5qPwU8rY\_v7Xg", "create\_time": "2026-04-01T10:00:00Z", "modify\_time": "2026-04-08T14:00:00Z", "latest\_comment\_create\_time": "2026-04-08T14:00:00Z", "comments": \[ { "comment\_id": "fcf7bf67fe134d20a49913c7d1e7ea4f", "thread\_id": "a084b2c7874c42ce9fe5b976160a332d", "root\_block\_id": "5a10e3c540dc4914ae7c846fa497f183", "content\_plain\_text": "Should we push this to Q2?", "attachments": \[ { "attachmentId": "xUt5QFe-Sq6\_8YPigKt3Eg", "name": "image.png", "type": "image/png", "size": "171153" } ], "created\_by": "Hj2sNkLdS5qPwU8rY\_v7Xg", "is\_edited": false, "create\_time": "2026-04-01T10:00:00Z", "modify\_time": "2026-04-01T10:00:00Z", "reactions": \[ { "reaction\_id": "b7e3f91a2c4d48e6a1d5c8f0e2b4a6d8", "comment\_id": "fcf7bf67fe134d20a49913c7d1e7ea4f", "reaction": "👍", "created\_by": "OnsTZFMpTUWD\_YTo2Z\_3Lg", "create\_time": "2026-04-02T08:00:00Z" } ] }, { "comment\_id": "d2a1c4e6f8b0374a9c5e7d1f3b6a8e0c", "thread\_id": "a084b2c7874c42ce9fe5b976160a332d", "root\_block\_id": "5a10e3c540dc4914ae7c846fa497f183", "parent\_id": "fcf7bf67fe134d20a49913c7d1e7ea4f", "content\_plain\_text": "No, let's keep the original timeline.", "created\_by": "OnsTZFMpTUWD\_YTo2Z\_3Lg", "is\_edited": false, "create\_time": "2026-04-08T14:00:00Z", "modify\_time": "2026-04-08T14:00:00Z" } ] } ], "page\_reactions": \[ { "reaction\_id": "e4f6a8c0d2b4917365e7f1a3c5d8b0e2", "reaction": "🎉", "created\_by": "KxR4mWVeQdGt7Lp1Nf\_08w", "create\_time": "2026-04-05T12:00:00Z" } ], "users": { "OnsTZFMpTUWD\_YTo2Z\_3Lg": { "user\_id": "OnsTZFMpTUWD\_YTo2Z\_3Lg", "display\_name": "Alice Johnson", "email": "alice.johnson\@example.com" }, "KxR4mWVeQdGt7Lp1Nf\_08w": { "user\_id": "KxR4mWVeQdGt7Lp1Nf\_08w", "display\_name": "Bob Smith", "email": "bob.smith\@example.com" }, "Hj2sNkLdS5qPwU8rY\_v7Xg": { "user\_id": "Hj2sNkLdS5qPwU8rY\_v7Xg", "display\_name": "Charlie Brown", "email": "charlie.brown\@example.com" } }, "attachments": \[ { "attachment\_id": "Tp7xKqW3RvNmYs9dF\_c2Jw", "name": "architecture-diagram.png", "type": "image/png", "size": 245760 }, { "attachment\_id": "Bm5nQeL8SxHkAr1gU\_v4Zw", "name": "requirements.pdf", "type": "application/pdf", "size": 1048576 } ] } \`\`\` ## Notes - All timestamp fields use \*\*RFC 3339\*\* string format (UTC). - The \`users\` map provides a lookup table for all \`user\_id\` values referenced throughout the archive (in \`operator\`, \`created\_by\`, \`updated\_by\`, etc.). - The \`markdown\` field contains the complete document content at the time of archiving, exported in Markdown format. - The \`attachments\` at the top level are \*\*document-level\*\* attachments only. Comment-level attachments are nested within each comment's \`attachments\` field. - **`file_id` (required)** `string` — Unique identifier of the archived file. - **`product` (required)** `string`, possible values: `"docs", "my_notes", "meeting_summary"` — Product type of the archived document. - **`trigger_type` (required)** `string`, possible values: `"doc_create", "doc_edit", "doc_view", "comment_change"` — Type of event that triggered this archive - **`version` (required)** `integer`, format: `uint32` — Archive version number that increments starting from 1. **Example:** ```json { "from": "2026-02-13T00:00:00Z", "to": "2026-03-14T00:00:00Z", "page_size": 20, "next_page_token": "IAfJX3jsOLW7w3dokmFl84zOa0MAVGyMEB2", "total_records": 30, "data": [ { "file_id": "hCSzn_k9SGGXTwjujsF73w", "version": 1, "product": "docs", "trigger_type": "doc_edit", "archive_time": "2023-07-27T17:36:34Z", "download_url": "https://example.com/download/archive.json" } ] } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request Invalid parameter. ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### List collaborators of a file - **Method:** `GET` - **Path:** `/docs/files/{fileId}/collaborators` - **Tags:** Collaborator List collaborators of a file. Only `doc` or `data table` files are supported. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_collaborator:read`,`docs_collaborator:read:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:read:list_file_collaborators`,`docs:read:list_file_collaborators:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` #### Responses ##### Status: 200 Returns the collaborators of a file. ###### Content-Type: application/json - **`collaborators`** `array` — A list of collaborators. Each collaborator item must contain exactly one of the following fields: \`user\_id\`, \`channel\_id\`, or \`email\`. **Items:** - **`avatar_url` (required)** `string` — The avatar URL. - **`collaborator_id` (required)** `string` — The collaborator item ID, used as the \`collaboratorId\` when removing or modifying a collaborator. - **`collaborator_name` (required)** `string` — The collaborator display name. - **`collaborator_type` (required)** `string`, possible values: `"user", "channel", "email"` — The collaborator type. - **`role` (required)** `string`, possible values: `"viewer", "commenter", "editor", "co-owner"` — The collaborator role. - **`channel_id`** `string` — The Zoom Team Chat channel ID. Available when \`collaborator\_type\` = \`channel\`. - **`email`** `string` — The email address. Available when \`collaborator\_type\` = \`email\`. - **`user_id`** `string` — The Zoom user ID. Available when \`collaborator\_type\` = \`user\`. **Example:** ```json { "collaborators": [ { "collaborator_id": "user:9aSWJV2rTyWwkIDWmPYsfg", "collaborator_type": "user", "role": "viewer", "collaborator_name": "Jack", "user_id": "9aSWJV2rTyWwkIDWmPYsfg", "channel_id": "utSBcPSTQTmiebe_if1rpg", "email": "user@example.com", "avatar_url": "https://images.zoom.us/p/v2/c6ea193b21e21r4rdqw21wdc3b0170737fb3213e21e34/1f1wwe2c3-432e-4dfa-92ab-f732w1a385q1301-2v21" } ] } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden Permission Denied. ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Add collaborators for a file - **Method:** `POST` - **Path:** `/docs/files/{fileId}/collaborators` - **Tags:** Collaborator Share a file with newly added Zoom users or Zoom Team Chat channels. Only `doc` or `data table` files are supported. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_collaborator:write`,`docs_collaborator:write:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:write:collaborator`,`docs:write:collaborator:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` **Not supported in Gov cluster** #### Request Body ##### Content-Type: application/json - **`collaborators` (required)** `array` — A list of collaborators to be added. Each collaborator item must contain exactly one of the following fields: \`user\_id\`, \`channel\_id\` and \`email\`. **Items:** - **`role` (required)** `string`, possible values: `"viewer", "commenter", "editor", "co-owner"` — The collaborator role. - **`channel_id`** `string` — Zoom team chat channel ID. - **`email`** `string` — Email address. - **`user_id`** `string` — Zoom user ID. **Example:** ```json { "collaborators": [ { "user_id": "9aSWJV2rTyWwkIDWmPYsfg", "channel_id": "4b1826c3597b492e9b1f7a9bd59d3f8c", "email": "user@example.com", "role": "viewer" } ] } ``` #### Responses ##### Status: 201 Returns the collaborators successfully added to collaborator list of this file. ###### Content-Type: application/json - **`collaborators` (required)** `array` — Collaborators successfully added to collaborator list of this file. Each collaborator item must contain exactly one of the following fields: \`user\_id\`, \`channel\_id\`, or \`email\`. **Items:** - **`collaborator_id` (required)** `string` — The collaborator item ID, used as the \`collaboratorId\` when removing or modifying a collaborator. - **`collaborator_type` (required)** `string`, possible values: `"user", "channel", "email"` — The collaborator type. - **`role` (required)** `string`, possible values: `"viewer", "commenter", "editor", "co-owner"` — The collaborator role. - **`channel_id`** `string` — The Zoom Team Chat channel ID. Available when \`collaborator\_type\` = \`channel\`. - **`email`** `string` — The email address. Available when \`collaborator\_type\` = \`email\`. - **`user_id`** `string` — The Zoom user ID. Available when \`collaborator\_type\` = \`user\`. **Example:** ```json { "collaborators": [ { "collaborator_id": "user:9aSWJV2rTyWwkIDWmPYsfg", "collaborator_type": "user", "role": "viewer", "user_id": "9aSWJV2rTyWwkIDWmPYsfg", "channel_id": "4b1826c3597b492e9b1f7a9bd59d3f8c", "email": "user@example.com" } ] } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden Permission Denied. ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found File not found. ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Remove a collaborator from a file - **Method:** `DELETE` - **Path:** `/docs/files/{fileId}/collaborators/{collaboratorId}` - **Tags:** Collaborator Remove a collaborator from a file. Only `doc` or `data table` files are supported. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_collaborator:delete`,`docs_collaborator:delete:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:delete:collaborator`,`docs:delete:collaborator:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` **Not supported in Gov cluster** #### Responses ##### Status: 204 Nothing to return. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden Permission Denied. ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found File not found. ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Modify a collaborator’s role on a file - **Method:** `PATCH` - **Path:** `/docs/files/{fileId}/collaborators/{collaboratorId}` - **Tags:** Collaborator Modify a collaborator’s role on a file. Only `doc` or `data table` files are supported. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_collaborator:write`,`docs_collaborator:write:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:update:collaborator`,`docs:update:collaborator:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` **Not supported in Gov cluster** #### Request Body ##### Content-Type: application/json - **`role` (required)** `string`, possible values: `"viewer", "commenter", "editor", "co-owner"` — The collaborator role. **Example:** ```json { "role": "viewer" } ``` #### Responses ##### Status: 204 Nothing to return. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden Permission Denied. ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found File not found. ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Insert blocks into a document - **Method:** `POST` - **Path:** `/docs/files/{fileId}/blocks` - **Tags:** Doc Content Insert new blocks at a specific position in a document. Accepts XML-formatted block content and supports positioning above, below, or inside a specific parent block. Use the Get file content endpoint with the query parameter `format=xml` first to fetch the document structure and block IDs. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_content:write` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:write:content` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` **Not supported in Gov cluster** #### Request Body ##### Content-Type: application/json - **`blocks` (required)** `string` — XML string containing block content. See the \[Zoom Docs XML Format Specification]\(https\://developers.zoom.us/docs/zoom-docs/doc-format-specification) for supported block types and syntax. - **`positioning`** `object` — Block positioning options. At most one of \`above\_block\_id\`, \`below\_block\_id\`, or \`parent\_block\_id\` should be specified. If none are specified, blocks are appended to the end of the document. - **`above_block_id`** `string` — Block ID to insert above (mutually exclusive with below) - **`below_block_id`** `string` — Block ID to insert below (mutually exclusive with above) - **`parent_block_id`** `string` — Parent block ID. Inserts at the end of this parent's children. **Example:** ```json { "positioning": { "above_block_id": "8d0ad8e130e14d44", "below_block_id": "8d0ad8e130e14d44", "parent_block_id": "a1b2c3d4e5f6" }, "blocks": "New content" } ``` #### Responses ##### Status: 201 Successfully inserted blocks. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`2000\` \
Block not found. \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`4000\` \
File not found. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Replace a range of blocks - **Method:** `POST` - **Path:** `/docs/files/{fileId}/blocks/replace_range` - **Tags:** Doc Content Replace a contiguous range of sibling blocks with new blocks in a single atomic operation. All blocks between start and end (inclusive) are removed and replaced with the provided XML block content. Important: `start_block_id` and `end_block_id` must be direct children of the same parent block (siblings). If they are not siblings, the operation will fail. Use the Get file content endpoint to verify the document structure before calling this endpoint. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_content:update` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:update:content` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` **Not supported in Gov cluster** #### Request Body ##### Content-Type: application/json - **`blocks` (required)** `string` — XML string containing block content. See the \[Zoom Docs XML Format Specification]\(https\://developers.zoom.us/docs/zoom-docs/doc-format-specification) for supported block types and syntax. - **`end_block_id` (required)** `string` — Block ID of the last block in the range. - **`start_block_id` (required)** `string` — Block ID of the first block in the range. **Example:** ```json { "blocks": "New content", "start_block_id": "a1b2c", "end_block_id": "d4e5f" } ``` #### Responses ##### Status: 204 Successfully replaced the specified block range with new blocks. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`2000\` \
Block not found. \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`4000\` \
File not found. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Delete a specific block - **Method:** `DELETE` - **Path:** `/docs/files/{fileId}/blocks/{blockId}` - **Tags:** Doc Content Deletes a block and all its content from the document. **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:delete:content` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` **Not supported in Gov cluster** #### Responses ##### Status: 204 Successfully deleted the block. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`2000\` \
Block not found. \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`4000\` \
File not found. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Update a specific block - **Method:** `PATCH` - **Path:** `/docs/files/{fileId}/blocks/{blockId}` - **Tags:** Doc Content Updates the content of an existing block using XML-formatted content. Keeps the existing block type and replaces the content. To change the block type, use ReplaceBlockRange. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_content:update` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:update:content` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` **Not supported in Gov cluster** #### Request Body ##### Content-Type: application/json - **`block` (required)** `string` — A single XML block string with the updated content. See the \[Zoom Docs XML Format Specification]\(https\://developers.zoom.us/docs/zoom-docs/doc-format-specification) for supported block types and syntax. **Example:** ```json { "block": "New content" } ``` #### Responses ##### Status: 204 Block updated successfully. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`2000\` \
Block not found. \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`4000\` \
File not found. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Create a file export - **Method:** `POST` - **Path:** `/docs/exports` - **Tags:** Export Creates a export for specified file. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_export:write`,`docs_export:write:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:write:export`,`docs:write:export:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `HEAVY` **Not supported in Gov cluster** #### Request Body ##### Content-Type: application/json - **`export_format` (required)** `string`, possible values: `"docx", "markdown", "pdf", "csv"` — The target format for export. Different file types support different export formats: - \`doc\` supports export to \`docx\`, \`markdown\` or \`pdf\` - \`data\_table\` supports export to \`csv\` - **`file_id` (required)** `string` — The doc file ID. **Example:** ```json { "file_id": "ADuV705lSXW4c6fBgQFarQ", "export_format": "docx" } ``` #### Responses ##### Status: 201 A Docs file is being converted into expected format. ###### Content-Type: application/json - **`export_id` (required)** `string` — The unique ID for your export. Use this ID to check the export status via the Get file export status endpoint (GET /docs/exports/{exportId}/status). **Example:** ```json { "export_id": "ccbb4d8f72774741af8b8141f92e6d83" } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Get file export status - **Method:** `GET` - **Path:** `/docs/exports/{exportId}/status` - **Tags:** Export Use this API to query the status of a file export. Before using this API, confirm that you have invoked the API Create a file export endpoint and obtained the `export_id`. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_export:read`,`docs_export:read:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:read:export`,`docs:read:export:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` **Not supported in Gov cluster** #### Responses ##### Status: 200 Retrieves the docs file export result. ###### Content-Type: application/json - **`status` (required)** `string`, possible values: `"processing", "failed", "succeeded"` — The status of the file export. Enum: - \`processing\` - The Docs file is being converted. - \`succeeded\` - The Docs file has been converted successfully. - \`failed\` - The Docs file has failed to convert. - **`download_link`** `string` — The download link for the converted file. This field will be returned when the value of status is \`succeeded\`. - **`expires_at`** `string` — The expiration date of the \`download\_link\` URL; after this time, the \`download\_link\` will become invalid. This field will be returned when the value of status is \`succeeded\`. **Example:** ```json { "status": "processing", "download_link": "https://file.zoom.us/file/xxxx?signature=xxxxx&token=xxxxx", "expires_at": "2025-12-11T08:51:54.887212742Z" } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`5150\` \
Export file size limit exceeded. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`5003\` \
The exportId not exists or expired. \
### Get file content - **Method:** `GET` - **Path:** `/docs/files/{fileId}/content` - **Tags:** Export Retrieves the file name and full file content in Markdown format. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_export:read` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:read:export` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `HEAVY` **Not supported in Gov cluster** #### Responses ##### Status: 200 Retrieves the file name and full file content in Markdown format. ###### Content-Type: application/json - **`file_content`** `string` — The document file content in Markdown format. - **`file_name`** `string` — The name of the document file. **Example:** ```json { "file_name": "Q3 Plan", "file_content": "## Product Development\n\n- Complete beta testing for mobile app by July 15\n- Implement AI-powered recommendation engine" } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`5150\` \
Export file size limit exceeded. \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden Permission denied. ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found File not found or deleted. ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Create a new file - **Method:** `POST` - **Path:** `/docs/files` - **Tags:** File Management Creates a new file for a user. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:write`,`docs:write:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:write:file`,`docs:write:file:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` **Not supported in Gov cluster** #### Request Body ##### Content-Type: application/json - **`file_name`** `string`, default: `"Untitled"` — The file name. - **`file_type`** `string`, possible values: `"doc", "folder", "data_table"`, default: `"doc"` — The type of a file. - **`parent_id`** `string` — The ID of the parent file. The newly created file will become a child of this parent. If this parameter is omitted, the file will be placed under "My Docs." Use "root" to represent the top-level folder of the current user. Folders can only be created under "My Docs," a shared folder, or another folder. - **`user_id`** `string` — When invoked with the \`admin\` scope, this operation runs on behalf of the specified user. Permissions are validated against that user. This parameter is required with the \`admin\` scope and has no effect otherwise. **Example:** ```json { "file_name": "Q3 Plan", "parent_id": "fIdgryoPSZ-Jm34Ag-OX7A", "file_type": "doc", "user_id": "9BGgfjrQTayGWw_422j1Bw" } ``` #### Responses ##### Status: 201 Returns the ID of the created file. ###### Content-Type: application/json - **`file_id`** `string` — The document file ID. **Example:** ```json { "file_id": "ADuV705lSXW4c6fBgQFarQ" } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request Invalid request parameters provided. ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden Permission required to create files under this parent directory. ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found File not found. ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Get metadata of a file - **Method:** `GET` - **Path:** `/docs/files/{fileId}` - **Tags:** File Management Get metadata of a file. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:read`,`docs:read:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:read:file`,`docs:read:file:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` **Not supported in Gov cluster** #### Responses ##### Status: 200 Returns the basic metadata of this file. ###### Content-Type: application/json - **`created_time` (required)** `string` — The time when the file created. - **`file_id` (required)** `string` — The doc file ID. - **`file_link` (required)** `string` — The URL link of the file. - **`file_name` (required)** `string` — The doc file name. - **`file_type` (required)** `string`, possible values: `"doc", "folder", "data_table"`, default: `"doc"` — The type of a file - **`modified_time` (required)** `string` — The time when the file last modified. **Example:** ```json { "file_id": "ADuV705lSXW4c6fBgQFarQ", "file_name": "Q3 Plan", "file_type": "doc", "file_link": "https://docs.zoom.us/doc/ADuV705lSXW4c6fBgQFarQ", "created_time": "2025-06-30T09:47:40.249Z", "modified_time": "2025-06-30T09:47:40.249Z" } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden Permission Denied. ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found File Not Found/Deleted. ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Delete a file - **Method:** `DELETE` - **Path:** `/docs/files/{fileId}` - **Tags:** File Management Delete a file. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:delete`,`docs:delete:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:delete:file`,`docs:delete:file:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` **Not supported in Gov cluster** #### Responses ##### Status: 204 \*\*HTTP Status Code\*\*: \`204\` File deleted successfully. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden Permission Denied. ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found File Not Found/Deleted. ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Modify metadata of a file - **Method:** `PATCH` - **Path:** `/docs/files/{fileId}` - **Tags:** File Management Modify metadata of a file. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:write`,`docs:write:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:update:file`,`docs:update:file:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` **Not supported in Gov cluster** #### Request Body ##### Content-Type: application/json - **`file_name`** `string` — File title name. **Example:** ```json { "file_name": "Q3 plan" } ``` #### Responses ##### Status: 204 \*\*HTTP Status Code\*\*: \`204\` Modify metadata successfully. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden Permission Denied. ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found File Not Found/Deleted. ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### List all children of a file - **Method:** `GET` - **Path:** `/docs/files/{fileId}/children` - **Tags:** File Management List all children of a file. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:read`,`docs:read:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:read:list_children`,`docs:read:list_children:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` #### Responses ##### Status: 200 Returns all children files. ###### Content-Type: application/json - **`files` (required)** `array` — children list **Items:** - **`created_time` (required)** `string` — The time when the file created. - **`file_id` (required)** `string` — The ID of a file. - **`file_link` (required)** `string` — The access link of a file. - **`file_name` (required)** `string` — The name of a file. - **`file_type` (required)** `string`, possible values: `"doc", "folder", "data_table"`, default: `"doc"` — The type of a file - **`modified_time` (required)** `string` — The time when the file last modified. - **`next_page_token` (required)** `string` — The next page token paginates through a large set of results. A next page token returns whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes. **Example:** ```json { "files": [ { "file_id": "61kkJE-rR52UsywN25E0hQ", "file_name": "Q3 plan", "file_type": "doc", "file_link": "https://docs.zoom.us/doc/61kkJE-rR52UsywN25E0hQ", "created_time": "2025-06-30T09:47:40.249Z", "modified_time": "2025-06-30T09:47:40.249Z" } ], "next_page_token": "eyJ0aW1lQ3Vyc29yIjoiMjAyNS0wNC0yMVQwOTo0NTo1OC45NTJaIiwiaWRDdXJzb3IiOiJzemFsMkpmTlFteTExY1JwdkYxRWhBIn0=" } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden Permission Denied. ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found Parent not found. ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Transfer ownership of a file - **Method:** `PUT` - **Path:** `/docs/files/{fileId}/owner` - **Tags:** File Management Transfer a file’s ownership to another user. Only `doc` or `data table` files are supported. Only the file `owner` has permission to perform an ownership transfer. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_file_owner:write`,`docs_file_owner:write:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:update:file_owner`,`docs:update:file_owner:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` **Not supported in Gov cluster** #### Request Body ##### Content-Type: application/json - **`user_id` (required)** `string` — Zoom user ID of the new owner. **Example:** ```json { "user_id": "9aSWJV2rTyWwkIDWmPYsfg" } ``` #### Responses ##### Status: 204 Nothing to return. ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden Permission denied ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Get user My docs info - **Method:** `GET` - **Path:** `/docs/users/{userId}/root` - **Tags:** File Management Get the specified user's My docs info. My docs is the root of a user's documents. **Example**: When an admin needs to list all children of another user's My docs ([/docs/files/{fileId}/children](https://s.zoom.us/u/bPFf2TRxP)), this API should be called to get the target user's My docs ID as `fileId` in path. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:read:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:read:file:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` **Not supported in Gov cluster** #### Responses ##### Status: 200 Returns user My Docs info. ###### Content-Type: application/json - **`root_id` (required)** `string` — User My Docs ID. **Example:** ```json { "root_id": "dAdqGeghRh6QF4dDe1Ex_A" } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found user id not found ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Create file upload for docs import or attachments - **Method:** `POST` - **Path:** `/docs/file_uploads` - **Tags:** File Uploads Create a file upload for document import or attachments. Notes: - Base URL: . - Rate limit: 20 requests per second per user or 2000 requests per second per IP address. - The caller must retain the Authorization header when redirected to a different hostname. - Unsupported file formats: `.svg`. - For an account-level [OAuth](https://developers.zoom.us/docs/integrations/create/) app, this API can only be used on behalf of a user who is assigned with a [role](https://support.zoom.com/hc/en/article?id=zm_kb\&sysparm_article=KB0064983#h_80abad9b-86a8-492c-8a3b-5b0141a8c0a9) with Edit permission for Docs Management. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_file_uploads:write`,`docs_file_uploads:write:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:write:file_uploads`,`docs:write:file_uploads:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `HEAVY` **Not supported in Gov cluster** #### Request Body ##### Content-Type: multipart/form-data - **`file` (required)** `string` — The data file to be uploaded. **Example:** ```json { "file": "" } ``` #### Responses ##### Status: 201 File successfully created. ###### Content-Type: application/json - **`file_upload_id`** `string` — The unique ID of the file upload. **Example:** ```json { "file_upload_id": "aBvhhhyjQUal6HacwXlYwe" } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Get the general access setting of a file - **Method:** `GET` - **Path:** `/docs/files/{fileId}/general_access_setting` - **Tags:** General Access Get the general access settings of a file. Only `doc` or `data table` files are supported. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_general_access:read`,`docs_general_access:read:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:read:general_access`,`docs:read:general_access:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` #### Responses ##### Status: 200 Return the general access setting of a file. ###### Content-Type: application/json - **`general_access_setting`** `object` — The general access setting of this file. - **`share_scope` (required)** `string`, possible values: `"collaborators_only", "anyone_in_org", "anyone_with_link"` — The general access scope of this file. \`collaborators\_only\`: only collaborators of this file can access \`anyone\_in\_org\`: users within the same orgnization as the file owner can access \`anyone\_with\_link\`: anyone can access this file, including anonymous user. - **`role`** `string`, possible values: `"viewer", "commenter", "editor"` — Role to collaborate. This field is empty when \`share\_scope\` is set to \`collaborators\_only\`. **Example:** ```json { "general_access_setting": { "share_scope": "anyone_in_org", "role": "viewer" } } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden Permission Denied. ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Modify the general access setting of a file - **Method:** `PATCH` - **Path:** `/docs/files/{fileId}/general_access_setting` - **Tags:** General Access Modify the general access setting for a file. Only `doc` or `data table` files are supported. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_general_access:write`,`docs_general_access:write:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:update:general_access`,`docs:update:general_access:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` **Not supported in Gov cluster** #### Request Body ##### Content-Type: application/json - **`general_access_setting` (required)** `object` — The general access setting. - **`share_scope` (required)** `string`, possible values: `"collaborators_only", "anyone_in_org", "anyone_with_link"` — The general access scope of this file. \`collaborators\_only\`: only collaborators of this file can access \`anyone\_in\_org\`: users within the same orgnization as the file owner can access \`anyone\_with\_link\`: anyone can access this file, including anonymous user. - **`role`** `string`, possible values: `"viewer", "commenter", "editor"` — Role to collaborate. This field is empty when \`share\_scope\` is set to \`collaborators\_only\`. **Example:** ```json { "general_access_setting": { "share_scope": "anyone_in_org", "role": "viewer" } } ``` #### Responses ##### Status: 204 Nothing to return. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden Permission Denied. ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found File not found. ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Create a new file from content - **Method:** `POST` - **Path:** `/docs/import_content` - **Tags:** Import Creates a new doc from Markdown content. The Markdown content is limited to 100 KB in size. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_import:write` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:write:import` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `HEAVY` **Not supported in Gov cluster** #### Request Body ##### Content-Type: application/json - **`content`** `string` — The Markdown-formatted content. If the content is empty, an empty document will be created. - **`file_name`** `string` — The name of the file. - **`parent_id`** `string` — The ID of the parent file. The newly created file will become a child of this parent. If this parameter is omitted, the file will be placed under \*\*My Docs\*\*. Use \`root\` to represent the top-level folder of the current user. Folders can only be created under \*\*My Docs\*\*, a shared folder, or another folder. **Example:** ````json { "file_name": "Q3 Plan", "parent_id": "fIdgryoPSZ-Jm34Ag-OX7A", "content": "# Project Overview This document provides a concise outline for a sample project, including goals, milestones, tasks, and open questions. ## 1. Goals - Define the project scope clearly. - Deliver a working prototype by the target date. - Ensure documentation is complete and maintainable. ## 2. Milestones | Milestone | Description | Target Date | |----------|-------------|--------------| | M1 | Requirement gathering | 2025-01-15 | | M2 | Prototype ready | 2025-02-10 | | M3 | Final review | 2025-03-01 | ## 3. Tasks - [ ] Set up development environment - [ ] Draft technical design - [ ] Implement core features - [ ] Write unit tests - [ ] Prepare demo ## 4. Architecture Diagram (Mermaid) ```mermaid flowchart TD A[Client] --> B[API Gateway] B --> C[Service A] B --> D[Service B] D --> E[Database] ``` ## 5. Open Questions - Should we adopt a monorepo structure? - Which logging strategy is preferred? - How should we structure integration tests? ## 6. Notes Add any additional remarks or context here." } ```` #### Responses ##### Status: 201 The uploaded file is being converted into a doc file. ###### Content-Type: application/json - **`file_id` (required)** `string` — The newly created file ID. - **`file_link` (required)** `string` — The URL of the file. **Example:** ```json { "file_id": "ch4L4KKgQVesEJcqdt1qIw", "file_link": "https://docs.zoom.us/doc/ch4L4KKgQVesEJcqdt1qIw" } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`5005\` \
Incorrect file format. \
\*\*Error Code:\*\* \`5109\` \
The size of content exceeds the limit. \
\*\*Error Code:\*\* \`5110\` \
The number of images exceeds the limit. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Create a new file by import - **Method:** `POST` - **Path:** `/docs/imports` - **Tags:** Import Creates a new file from a file upload. **When importing the uploaded file as a specified type of Docs file:** - `doc` - Upload file size limit is 10MB. - The size limit for a single Block's content is 1MB. - Maximum number of Blocks allowed is 20,000. - `data_table` - Upload file size limit is 10MB. - Maximum number of columns allowed in a single data table is 200. - The size limit for a single Block's content is 1MB. - Maximum number of Blocks allowed in a single data table is 20,000. **When importing an HTML compressed package exported from Notion into Docs:** - Maximum allowed size for a single zip archive is 4GB. - Maximum number of files that can be imported into Docs within a single ZIP file is 100,000. - The maximum depth of parent-child relationships between files in the tree structure is 20. - Maximum number of child nodes allowed per node in the tree is 2,000. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_import:write`,`docs_import:write:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:write:import`,`docs:write:import:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `HEAVY` **Not supported in Gov cluster** #### Request Body ##### Content-Type: application/json - **`file_upload_id` (required)** `string` — The ID of the file upload. Ensure the file is valid, within the size limit, and in a supported format. - **`file_upload_type` (required)** `string`, possible values: `"docx", "txt", "markdown", "csv", "xlsx", "notion_zip", "html"` — The supported file format for upload. For file type \`doc\`, the supported formats are \`.docx\`, \`.txt\`, \`.html\` and \`.md\`. For file type \`data\_table\`, the supported formats are \`.xlsx\` and \`.csv\`. For the zip file in HTML format exported from Notion, use \`notion\_zip\`. - **`file_name`** `string` — The name of the file. - **`file_type`** `string`, possible values: `"doc", "data_table"`, default: `"doc"` — The type of the file created after import. - **`parent_id`** `string` — The ID of the parent file. The newly created file will become a child of this parent. If this parameter is omitted, the file will be placed under \*\*My Docs\*\*. Use \`root\` to represent the top-level folder of the current user. Folders can only be created under \*\*My Docs\*\*, a shared folder, or another folder. - **`user_id`** `string` — When invoked with the \`admin\` scope, this operation runs on behalf of the specified user. Permissions are validated against that user. This parameter is required with the \`admin\` scope and has no effect otherwise. **Example:** ```json { "file_name": "Q3 Plan", "file_type": "doc", "parent_id": "fIdgryoPSZ-Jm34Ag-OX7A", "file_upload_id": "aBvhhhyjQUal6HacwXlYwe", "file_upload_type": "docx", "user_id": "9BGgfjrQTayGWw_422j1Bw" } ``` #### Responses ##### Status: 201 The uploaded file is being converted into a Docs file. ###### Content-Type: application/json - **`import_id` (required)** `string` — The unique ID for your import. Use this ID to check the import status via the \*\*Get file import status\*\* endpoint (GET /docs/imports/{importId}/status). **Example:** ```json { "import_id": "ccbb4d8f72774741af8b8141f92e6d83" } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`5004\` \
File size limit exceeded. \
\*\*Error Code:\*\* \`5005\` \
Incorrect file format. \
\*\*Error Code:\*\* \`20001\` \
Invalid \`user\_id\` for \`admin\` scope. \
\*\*Error Code:\*\* \`20002\` \
\`parent\_id\` file not found. \
\*\*Error Code:\*\* \`20003\` \
Invalid \`file\_type\`. \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden Permission is needed to create children under this file. ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`5007\` \
File upload does not exist. \
### Get file import status - **Method:** `GET` - **Path:** `/docs/imports/{importId}/status` - **Tags:** Import Use this API to query the status of a new file by import. Before using this API, confirm that you have invoked the API **Create a new file by import** endpoint and obtained the `import_id`. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs_import:read`,`docs_import:read:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `docs:read:import`,`docs:read:import:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` **Not supported in Gov cluster** #### Responses ##### Status: 200 Retrieves the docs file import result. ###### Content-Type: application/json - **`file_id` (required)** `string` — The file ID is \`nullable\`. This value is returned only when the status is \`succeeded\`. The zip file in HTML format exported from Notion may contain data for one or more files; importing will only return the root ID of the imported files. - **`file_type` (required)** `string`, possible values: `"doc", "data_table"` — The type of the created file. - **`status` (required)** `string`, possible values: `"succeeded", "processing", "failed"` — The status of the file created by importing an uploaded file. Enum: \`processing\` - The uploaded file is being converted. \`succeeded\` - The uploaded file has been converted successfully. \`failed\` - The uploaded file has failed to convert. **Example:** ```json { "status": "processing", "file_id": "ch4L4KKgQVesEJcqdt1qIw", "file_type": "doc" } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/).