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: docs_archiving:read:admin
Granular Scopes: docs:read:archive:admin
Rate Limit Label: 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
-
attachmentsarray— List of attachments with their download URLs or failure reasons.Items:
-
attachment_id(required)string— The attachment ID. -
download_urlstring— The signed download URL for the attachment, valid for 1 hour. Empty if the download URL could not be retrieved. -
failed_reasonstring— The reason for failure if the download URL could not be retrieved. Empty if the download URL was successfully retrieved.
-
Example:
{
"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` <br> Bad Request Invalid parameters.
Status: 429 **HTTP Status Code:** `429` <br> 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: docs_archiving:read:admin
Granular Scopes: docs:read:archive:admin
Rate Limit Label: 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. -
dataarray— 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:
{
"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` <br> Bad Request Invalid parameter.
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 429 **HTTP Status Code:** `429` <br> 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: docs_collaborator:read,docs_collaborator:read:admin
Granular Scopes: docs:read:list_file_collaborators,docs:read:list_file_collaborators:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 Returns the collaborators of a file.
Content-Type: application/json
-
collaboratorsarray— 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_idstring— The Zoom Team Chat channel ID. Available when `collaborator_type` = `channel`. -
emailstring— The email address. Available when `collaborator_type` = `email`. -
user_idstring— The Zoom user ID. Available when `collaborator_type` = `user`.
-
Example:
{
"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` <br> Bad Request
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission Denied.
Status: 429 **HTTP Status Code:** `429` <br> 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: docs_collaborator:write,docs_collaborator:write:admin
Granular Scopes: docs:write:collaborator,docs:write:collaborator:admin
Rate Limit Label: 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_idstring— Zoom team chat channel ID. -
emailstring— Email address. -
user_idstring— Zoom user ID.
-
Example:
{
"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_idstring— The Zoom Team Chat channel ID. Available when `collaborator_type` = `channel`. -
emailstring— The email address. Available when `collaborator_type` = `email`. -
user_idstring— The Zoom user ID. Available when `collaborator_type` = `user`.
-
Example:
{
"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` <br> Bad Request
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission Denied.
Status: 404 **HTTP Status Code:** `404` <br> Not Found File not found.
Status: 429 **HTTP Status Code:** `429` <br> 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: docs_collaborator:delete,docs_collaborator:delete:admin
Granular Scopes: docs:delete:collaborator,docs:delete:collaborator:admin
Rate Limit Label: MEDIUM
Not supported in Gov cluster
Responses
Status: 204 Nothing to return.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission Denied.
Status: 404 **HTTP Status Code:** `404` <br> Not Found File not found.
Status: 429 **HTTP Status Code:** `429` <br> 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: docs_collaborator:write,docs_collaborator:write:admin
Granular Scopes: docs:update:collaborator,docs:update:collaborator:admin
Rate Limit Label: 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:
{
"role": "viewer"
}
Responses
Status: 204 Nothing to return.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission Denied.
Status: 404 **HTTP Status Code:** `404` <br> Not Found File not found.
Status: 429 **HTTP Status Code:** `429` <br> 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: docs_export:write,docs_export:write:admin
Granular Scopes: docs:write:export,docs:write:export:admin
Rate Limit Label: 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:
{
"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:
{
"export_id": "ccbb4d8f72774741af8b8141f92e6d83"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 429 **HTTP Status Code:** `429` <br> 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: docs_export:read,docs_export:read:admin
Granular Scopes: docs:read:export,docs:read:export:admin
Rate Limit Label: 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_linkstring— The download link for the converted file. This field will be returned when the value of status is `succeeded`. -
expires_atstring— 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:
{
"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` <br> Bad Request **Error Code:** `5150` <br> Export file size limit exceeded. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `5003` <br> The exportId not exists or expired. <br>
Get file content
- Method:
GET - Path:
/docs/files/{fileId}/content - Tags: Export
Retrieves the file name and full file content in Markdown format.
Scopes: docs_export:read
Granular Scopes: docs:read:export
Rate Limit Label: 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_contentstring— The document file content in Markdown format. -
file_namestring— The name of the document file.
Example:
{
"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` <br> Bad Request **Error Code:** `5150` <br> Export file size limit exceeded. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission denied.
Status: 404 **HTTP Status Code:** `404` <br> Not Found File not found or deleted.
Status: 429 **HTTP Status Code:** `429` <br> 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: docs:write,docs:write:admin
Granular Scopes: docs:write:file,docs:write:file:admin
Rate Limit Label: MEDIUM
Not supported in Gov cluster
Request Body
Content-Type: application/json
-
file_namestring, default:"Untitled"— The file name. -
file_typestring, possible values:"doc", "folder", "data_table", default:"doc"— The type of a file. -
parent_idstring— 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_idstring— 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:
{
"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_idstring— The document file ID.
Example:
{
"file_id": "ADuV705lSXW4c6fBgQFarQ"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Invalid request parameters provided.
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission required to create files under this parent directory.
Status: 404 **HTTP Status Code:** `404` <br> Not Found File not found.
Status: 429 **HTTP Status Code:** `429` <br> 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: docs:read,docs:read:admin
Granular Scopes: docs:read:file,docs:read:file:admin
Rate Limit Label: 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:
{
"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` <br> Bad Request
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission Denied.
Status: 404 **HTTP Status Code:** `404` <br> Not Found File Not Found/Deleted.
Status: 429 **HTTP Status Code:** `429` <br> 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: docs:delete,docs:delete:admin
Granular Scopes: docs:delete:file,docs:delete:file:admin
Rate Limit Label: MEDIUM
Not supported in Gov cluster
Responses
Status: 204 **HTTP Status Code**: `204` File deleted successfully.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission Denied.
Status: 404 **HTTP Status Code:** `404` <br> Not Found File Not Found/Deleted.
Status: 429 **HTTP Status Code:** `429` <br> 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: docs:write,docs:write:admin
Granular Scopes: docs:update:file,docs:update:file:admin
Rate Limit Label: MEDIUM
Not supported in Gov cluster
Request Body
Content-Type: application/json
-
file_namestring— File title name.
Example:
{
"file_name": "Q3 plan"
}
Responses
Status: 204 **HTTP Status Code**: `204` Modify metadata successfully.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission Denied.
Status: 404 **HTTP Status Code:** `404` <br> Not Found File Not Found/Deleted.
Status: 429 **HTTP Status Code:** `429` <br> 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: docs:read,docs:read:admin
Granular Scopes: docs:read:list_children,docs:read:list_children:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 Returns all children files.
Content-Type: application/json
-
files(required)array— children listItems:
-
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:
{
"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` <br> Bad Request
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission Denied.
Status: 404 **HTTP Status Code:** `404` <br> Not Found Parent not found.
Status: 429 **HTTP Status Code:** `429` <br> 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: docs_file_owner:write,docs_file_owner:write:admin
Granular Scopes: docs:update:file_owner,docs:update:file_owner:admin
Rate Limit Label: MEDIUM
Not supported in Gov cluster
Request Body
Content-Type: application/json
-
user_id(required)string— Zoom user ID of the new owner.
Example:
{
"user_id": "9aSWJV2rTyWwkIDWmPYsfg"
}
Responses
Status: 204 Nothing to return.
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission denied
Status: 429 **HTTP Status Code:** `429` <br> 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), this API should be called to get the target user's My docs ID as fileId in path.
Scopes: docs:read:admin
Granular Scopes: docs:read:file:admin
Rate Limit Label: 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:
{
"root_id": "dAdqGeghRh6QF4dDe1Ex_A"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> Not Found user id not found
Status: 429 **HTTP Status Code:** `429` <br> 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: https://fileapi.zoom.us/v2.
- 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 app, this API can only be used on behalf of a user who is assigned with a role with Edit permission for Docs Management.
Scopes: docs_file_uploads:write,docs_file_uploads:write:admin
Granular Scopes: docs:write:file_uploads,docs:write:file_uploads:admin
Rate Limit Label: HEAVY
Not supported in Gov cluster
Request Body
Content-Type: multipart/form-data
-
file(required)string— The data file to be uploaded.
Example:
{
"file": "<binary data>"
}
Responses
Status: 201 File successfully created.
Content-Type: application/json
-
file_upload_idstring— The unique ID of the file upload.
Example:
{
"file_upload_id": "aBvhhhyjQUal6HacwXlYwe"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 429 **HTTP Status Code:** `429` <br> 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: docs_general_access:read,docs_general_access:read:admin
Granular Scopes: docs:read:general_access,docs:read:general_access:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 Return the general access setting of a file.
Content-Type: application/json
-
general_access_settingobject— 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. -
rolestring, possible values:"viewer", "commenter", "editor"— Role to collaborate. This field is empty when `share_scope` is set to `collaborators_only`.
-
Example:
{
"general_access_setting": {
"share_scope": "anyone_in_org",
"role": "viewer"
}
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission Denied.
Status: 429 **HTTP Status Code:** `429` <br> 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: docs_general_access:write,docs_general_access:write:admin
Granular Scopes: docs:update:general_access,docs:update:general_access:admin
Rate Limit Label: 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. -
rolestring, possible values:"viewer", "commenter", "editor"— Role to collaborate. This field is empty when `share_scope` is set to `collaborators_only`.
-
Example:
{
"general_access_setting": {
"share_scope": "anyone_in_org",
"role": "viewer"
}
}
Responses
Status: 204 Nothing to return.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission Denied.
Status: 404 **HTTP Status Code:** `404` <br> Not Found File not found.
Status: 429 **HTTP Status Code:** `429` <br> 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: docs_import:write
Granular Scopes: docs:write:import
Rate Limit Label: HEAVY
Not supported in Gov cluster
Request Body
Content-Type: application/json
-
contentstring— The Markdown-formatted content. If the content is empty, an empty document will be created. -
file_namestring— The name of the file. -
parent_idstring— 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:
{
"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:
{
"file_id": "ch4L4KKgQVesEJcqdt1qIw",
"file_link": "https://docs.zoom.us/doc/ch4L4KKgQVesEJcqdt1qIw"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `5005` <br> Incorrect file format. <br> **Error Code:** `5109` <br> The size of content exceeds the limit. <br> **Error Code:** `5110` <br> The number of images exceeds the limit. <br>
Status: 429 **HTTP Status Code:** `429` <br> 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: docs_import:write,docs_import:write:admin
Granular Scopes: docs:write:import,docs:write:import:admin
Rate Limit Label: 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_namestring— The name of the file. -
file_typestring, possible values:"doc", "data_table", default:"doc"— The type of the file created after import. -
parent_idstring— 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_idstring— 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:
{
"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:
{
"import_id": "ccbb4d8f72774741af8b8141f92e6d83"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `5004` <br> File size limit exceeded. <br> **Error Code:** `5005` <br> Incorrect file format. <br> **Error Code:** `20001` <br> Invalid `user_id` for `admin` scope. <br> **Error Code:** `20002` <br> `parent_id` file not found. <br> **Error Code:** `20003` <br> Invalid `file_type`. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission is needed to create children under this file.
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `5007` <br> File upload does not exist. <br>
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: docs_import:read,docs_import:read:admin
Granular Scopes: docs:read:import,docs:read:import:admin
Rate Limit Label: 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:
{
"status": "processing",
"file_id": "ch4L4KKgQVesEJcqdt1qIw",
"file_type": "doc"
}