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
  • 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:

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

  • 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:

{
  "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
  • 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:

{
  "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_id

      string — Zoom team chat channel ID.

    • email

      string — Email address.

    • user_id

      string — 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_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:

{
  "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_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:

{
  "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_content

    string — The document file content in Markdown format.

  • file_name

    string — 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_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:

{
  "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:

{
  "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_name

    string — 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 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:

{
  "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_id

    string — 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_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:

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

    • role

      string, 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
  • 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:

{
  "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_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:

{
  "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"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
Status: 404 **HTTP Status Code:** `404` <br> 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/).