Canvas

  • OpenAPI Version: 3.1.1
  • API Version: 2

The Canvas API extends Canvas capabilities, enabling developers to integrate document management and collaboration into their applications. The API is organized into these areas: Document management, Document content, Data tables, Document metadata and access.

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 is returned 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`, `transcript_change` | | `is_manual_notes` | boolean | No | Whether the MyNotes content in this version was manually entered (vs. AI-enhanced). `false` indicates the content was processed with AI enhancement. Applicable only to the `my_notes` product | | `transcript` | object | No | Meeting transcript snapshot. Present only for `my_notes` product when transcript data is available. Structure defined in **Transcript** below | | `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 ### Transcript Meeting transcript snapshot for a MyNotes document. Contains the transcribed conversation items and the speaker roster. | Field | Type | Required | Description | |-------|------|----------|-------------| | `items` | array | No | Transcribed conversation items in chronological order. Each element follows the **TranscriptItem** structure below | | `speakers` | array | No | Speaker roster referenced by the transcript items. Each element follows the **TranscriptSpeaker** structure below | ### TranscriptItem A single transcribed utterance within the transcript. | Field | Type | Required | Description | |-------|------|----------|-------------| | `text` | string | Yes | Transcribed text of this utterance | | `start_time` | string | Yes | Start time offset of this utterance within the meeting (e.g., `00:00:05`) | | `end_time` | string | Yes | End time offset of this utterance within the meeting (e.g., `00:00:09`) | | `user_id` | integer | No | Numeric speaker identifier, cross-referencing `user_id` in **TranscriptSpeaker** | | `highlight_flag` | integer | No | Whether this utterance is highlighted. `0` = normal, `1` = highlighted | ### TranscriptSpeaker Identity of a participant referenced by the transcript items. | Field | Type | Required | Description | |-------|------|----------|-------------| | `user_id` | integer | No | Numeric speaker identifier referenced by **TranscriptItem** `user_id` | | `zoom_user_id` | string | No | Zoom user identifier of the speaker | | `username` | string | No | Account username of the speaker | | `speaker_id` | string | No | Speaker identifier assigned within the meeting | | `speaker_name` | string | No | Display name of the speaker as shown in the transcript | | `speaker_zoom_user_id` | string | No | Zoom user identifier associated with the speaker entry | | `is_unknown` | boolean | No | Whether the speaker could not be identified | ### 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 } ] } ``` ### JSON Example (MyNotes with Transcript) A `my_notes` archive triggered by a transcript change. It includes the `is_manual_notes` flag and the `transcript` object with conversation items and the speaker roster. ```json { "file_id": "Nt4kPzQwRb6McD1sFgHy8A", "version": 5, "product": "my_notes", "trigger_type": "transcript_change", "is_manual_notes": false, "archive_time": "2026-05-12T03:21:47Z", "file_metadata": { "title": "Weekly Sync - Engineering", "owner_id": "OnsTZFMpTUWD_YTo2Z_3Lg", "owner_name": "Alice Johnson", "owner_email": "alice.johnson@example.com", "create_time": "2026-05-12T02:00:00Z", "last_edit_time": "2026-05-12T03:00:00Z", "is_deleted": false }, "page_icon": "🗒️", "operator": { "user_id": "OnsTZFMpTUWD_YTo2Z_3Lg", "display_name": "Alice Johnson", "email": "alice.johnson@example.com" }, "markdown": "# Weekly Sync - Engineering\n\n## Summary\n\n- Reviewed sprint progress\n- Agreed on release date\n", "transcript": { "items": [ { "text": "Good morning everyone, let's get started with the weekly sync.", "start_time": "00:00:02", "end_time": "00:00:06", "user_id": 101, "highlight_flag": 0 }, { "text": "Sure. The payment service migration is on track for Friday.", "start_time": "00:00:07", "end_time": "00:00:11", "user_id": 102, "highlight_flag": 1 }, { "text": "Great. Any blockers we should be aware of?", "start_time": "00:00:12", "end_time": "00:00:15", "user_id": 101, "highlight_flag": 0 }, { "text": "Just waiting on the final QA sign-off, but we're confident.", "start_time": "00:00:16", "end_time": "00:00:20", "user_id": 103, "highlight_flag": 0 }, { "text": "Perfect. Let's lock in Friday for the release then.", "start_time": "00:00:21", "end_time": "00:00:24", "user_id": 101, "highlight_flag": 1 } ], "speakers": [ { "user_id": 101, "zoom_user_id": "OnsTZFMpTUWD_YTo2Z_3Lg", "username": "alice.johnson@example.com", "speaker_id": "spk_001", "speaker_name": "Alice Johnson", "speaker_zoom_user_id": "OnsTZFMpTUWD_YTo2Z_3Lg", "is_unknown": false }, { "user_id": 102, "zoom_user_id": "KxR4mWVeQdGt7Lp1Nf_08w", "username": "bob.smith@example.com", "speaker_id": "spk_002", "speaker_name": "Bob Smith", "speaker_zoom_user_id": "KxR4mWVeQdGt7Lp1Nf_08w", "is_unknown": false }, { "user_id": 103, "zoom_user_id": "", "username": "", "speaker_id": "spk_003", "speaker_name": "Guest Speaker", "speaker_zoom_user_id": "", "is_unknown": true } ] }, "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" } } } ``` ## 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. - The `is_manual_notes` and `transcript` fields apply only to the `my_notes` product. For `docs` and `meeting_summary`, they are omitted. - `is_manual_notes` reflects how the MyNotes content in this version was produced: `true` means it was manually entered, while `false` means it was processed with AI enhancement.

    • 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", "transcript_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 data table

  • Method: POST
  • Path: /docs/files/{fileId}/data_table
  • Tags: DataTable Content

Creates a new table inside an existing file. This API does not create a new data table file. To create a data table file, use the Create a new file endpoint with the data_table file type.

This API supports two host file types:

  • In a doc file, the inserted table is referred to as a data table.
  • In a data table file, the inserted table is referred to as a table.

Scopes: canvas_data_table:write

Granular Scopes: canvas:write:data_table

Rate Limit Label: MEDIUM

Not supported in Gov cluster

Request Body

Content-Type: application/json
  • columns (required)

    array — The list of columns to create.

    Items:

    • column_type (required)

      string, possible values: "text", "number", "percent", "single_select", "multiple_select", "date", "people", "checkbox", "attachment", "reaction", "created_by", "updated_by", "created_time", "updated_time", "currency", "page", "url" — The type of the column.

    • name (required)

      string — The column name.

    • column_options

      object — The corresponding relationship between column type and column option is as follows: `date`|`created_time`|`updated_time`: date_option `number`: number_option `currency`: currency_option `percent`: percent_option `url`: url_option `attachment`: attachment_option `reaction`: reaction_option `single_select`|`multiple_select`: select_option `people`: people_option Other column types do not have a column option.

      • attachment_option

        object — The `attachment` column option.

        • layout (required)

          string, possible values: "thumbnail", "full_width" — The attachment layout.

      • currency_option

        object — The `currency` column option.

        • decimal (required)

          integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

        • format (required)

          string, possible values: "accounting", "currency" — The currency format.

        • symbol (required)

          string, possible values: "$", "¥", "€", "Ft", "Rp", "kr", "R", "CHF", "DH", "₹", "zł", "₽", "₩", "฿", "₺", "£" — The currency symbol.

      • date_option

        object — The `date`|`created_time`|`updated_time` column option.

        • format (required)

          string, possible values: "MM/dd/yyyy", "MM/dd/yy", "M/d/yyyy", "yy-MM-dd", "yyyy/MM/dd", "yy/MM/dd", "yyyy/M/d", "yy/M/d", "dd/MM/yyyy", "dd/MM/yy", "MMM d, yyyy", "EEE, MMM d", "EEE, MMM d, yyyy", "EEE" — The date display format. Examples are as follows: 2025-10-21 12:00 2025/10/21 12:00 2025/10/21 00:00 25-10-21 00:30 10/21/2025 00:30 10/21/25 00:30 08/10/2025 01:00 08/10/25 01:00

        • is_24_hour_format (required)

          boolean — If `true`, display in 24-hour format. If `false`, display in 12-hour format.

      • number_option

        object — The `number` column option.

        • decimal (required)

          integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

        • show_separator (required)

          boolean — If `true`, display thousand separators. If `false`, do not display thousand separators.

      • people_option

        object — The `people` column option.

        • is_multiple (required)

          boolean — If `true`, allow selection of multiple people. If `false`, only one person can be selected.

        • is_notify (required)

          boolean — If `true`, send a notification message after selecting someone. If `false`, do not send a notification message after selecting someone.

      • percent_option

        object — The `percent` column option.

        • decimal (required)

          integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

        • show_progress_bar (required)

          boolean — If `true`, display the progress bar. If `false`, do not display the progress bar.

      • reaction_option

        object — The `reaction` column option.

        • allow_commenter_react (required)

          boolean — Whether a user with only commenter permission is allowed to click. If `true`, the user is allowed to click. If `false`, the user is not allowed to click.

        • display_type (required)

          string, possible values: "number", "people", "none" — The reaction icon display type.

        • icon (required)

          object — The icon content.

          • type (required)

            string, possible values: "emoji" — The icon display type. Currently only supports emoji.

          • value (required)

            string, possible values: "👍", "👎", "🌟" — The icon value.

      • select_option

        object — The `single_select` and `multiple_select` column option.

        • options

          array — The option list.

          Items:

          • name

            string — The option name.

      • url_option

        object — The `url` column option.

        • display_type (required)

          string, possible values: "title", "full", "icon" — The URL display type.

        • open_type (required)

          string, possible values: "current_page", "new_page" — The URL open type.

    • description

      string — Column Description

  • name (required)

    string — The table name.

  • after_block_id

    string — If `after_block_id` is provided, the new table is inserted after the specified block. If `after_block_id` is omitted, the new table is inserted at the end of the file.

Example:

{
  "after_block_id": "44879b1a2ee54ada9426b82c2e654c74",
  "name": "Project Tracker",
  "columns": [
    {
      "name": "Text",
      "column_type": "text",
      "description": "Text Content",
      "column_options": {
        "date_option": {
          "format": "MM/dd/yyyy",
          "is_24_hour_format": false
        },
        "number_option": {
          "decimal": 1,
          "show_separator": false
        },
        "select_option": {
          "options": [
            {
              "name": "Blue"
            }
          ]
        },
        "percent_option": {
          "decimal": 1,
          "show_progress_bar": false
        },
        "people_option": {
          "is_multiple": false,
          "is_notify": false
        },
        "reaction_option": {
          "icon": {
            "type": "emoji",
            "value": "👍"
          },
          "display_type": "number",
          "allow_commenter_react": false
        },
        "currency_option": {
          "decimal": 1,
          "symbol": "$",
          "format": "accounting"
        },
        "attachment_option": {
          "layout": "thumbnail"
        },
        "url_option": {
          "display_type": "title",
          "open_type": "current_page"
        }
      }
    }
  ]
}

Responses

Status: 201 Table created successfully.
Content-Type: application/json
  • columns (required)

    array — The list of created columns.

    Items:

    • column_id (required)

      string — The column ID.

    • column_type (required)

      string, possible values: "text", "number", "percent", "single_select", "multiple_select", "date", "people", "checkbox", "attachment", "reaction", "created_by", "updated_by", "created_time", "updated_time", "currency", "page", "url" — The type of the column.

    • integrated (required)

      boolean — If `true`, this column is an integrated column and cannot be edited by the user. If `false`, the user can edit it.

    • name (required)

      string — The column name.

    • column_options

      object — The corresponding relationship between column type and column option is as follows: `date`|`created_time`|`updated_time`: date_option `number`: number_option `currency`: currency_option `percent`: percent_option `url`: url_option `attachment`: attachment_option `reaction`: reaction_option `single_select`|`multiple_select`: select_option `people`: people_option Other column types do not have a column option.

      • attachment_option

        object — The `attachment` column option.

        • layout (required)

          string, possible values: "thumbnail", "full_width" — The attachment layout.

      • currency_option

        object — The `currency` column option.

        • decimal (required)

          integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

        • format (required)

          string, possible values: "accounting", "currency" — The currency format.

        • symbol (required)

          string, possible values: "$", "¥", "€", "Ft", "Rp", "kr", "R", "CHF", "DH", "₹", "zł", "₽", "₩", "฿", "₺", "£" — The currency symbol.

      • date_option

        object — The `date`|`created_time`|`updated_time` column option.

        • format (required)

          string, possible values: "MM/dd/yyyy", "MM/dd/yy", "M/d/yyyy", "yy-MM-dd", "yyyy/MM/dd", "yy/MM/dd", "yyyy/M/d", "yy/M/d", "dd/MM/yyyy", "dd/MM/yy", "MMM d, yyyy", "EEE, MMM d", "EEE, MMM d, yyyy", "EEE" — The date format. Examples are as follows: 2025-10-21 12:00 2025/10/21 12:00 2025/10/21 00:00 25-10-21 00:30 10/21/2025 00:30 10/21/25 00:30 08/10/2025 01:00 08/10/25 01:00

        • is_24_hour_format (required)

          boolean — If `true`, display in 24-hour format. If `false`, display in 12-hour format.

      • number_option

        object — The `number` column option.

        • decimal (required)

          integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

        • show_separator (required)

          boolean — If `true`, display thousand separators. If `false`, do not display thousand separators.

      • people_option

        object — The `people` column option.

        • is_multiple (required)

          boolean — If `true`, allow selection of multiple people. If `false`, only one person can be selected.

        • is_notify (required)

          boolean — If `true`, send a notification message after selecting someone. If `false`, do not send a notification message after selecting someone.

      • percent_option

        object — The `percent` column option.

        • decimal (required)

          integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

        • show_progress_bar (required)

          boolean — If `true`, display the progress bar. If `false`, do not display the progress bar.

      • reaction_option

        object — The `reaction` column option.

        • allow_commenter_react (required)

          boolean — Whether a user with only commenter permission is allowed to click. If `true`, the user is allowed to click. If `false`, the user is not allowed to click.

        • display_type (required)

          string, possible values: "number", "people", "none" — The reaction icon display type.

        • icon (required)

          object — The icon content.

          • type (required)

            string, possible values: "emoji" — The icon display type. Currently only supports emoji.

          • value (required)

            string, possible values: "👍", "👎", "🌟" — The icon value.

      • select_option

        object — The `single_select` and `multiple_select` column option.

        • options

          array — The option list.

          Items:

          • id

            string — The option ID.

          • name

            string — The option name.

      • url_option

        object — The `url` column option.

        • display_type (required)

          string, possible values: "title", "full", "icon" — The URL display type.

        • open_type (required)

          string, possible values: "current_page", "new_page" — The URL open type.

    • description

      string — Column Description

  • table_id (required)

    string — The ID of the created table.

  • name

    string — The table name.

Example:

{
  "table_id": "c9456fb41aac408286651625298e863c",
  "name": "Project Tracker",
  "columns": [
    {
      "name": "Text",
      "column_type": "text",
      "description": "Text Content",
      "column_options": {
        "date_option": {
          "format": "MM/dd/yyyy",
          "is_24_hour_format": false
        },
        "number_option": {
          "decimal": 1,
          "show_separator": false
        },
        "select_option": {
          "options": [
            {
              "name": "Blue",
              "id": "A8xSJQDVf1dnVIVh"
            }
          ]
        },
        "percent_option": {
          "decimal": 1,
          "show_progress_bar": false
        },
        "people_option": {
          "is_multiple": false,
          "is_notify": false
        },
        "reaction_option": {
          "icon": {
            "type": "emoji",
            "value": "👍"
          },
          "display_type": "number",
          "allow_commenter_react": false
        },
        "currency_option": {
          "decimal": 1,
          "symbol": "$",
          "format": "accounting"
        },
        "attachment_option": {
          "layout": "thumbnail"
        },
        "url_option": {
          "display_type": "title",
          "open_type": "current_page"
        }
      },
      "column_id": "dd08972e3bca46b89ba7bf0c9ee32ff5",
      "integrated": false
    }
  ]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Invalid parameters. **Error Code:** `2012` <br> Unsupported column type. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden No permission. **Error Code:** `2009` <br> No permission to access or modify this resource. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found File not found. **Error Code:** `2000` <br> Block not found. <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/).

List data tables in a file

  • Method: GET
  • Path: /docs/files/{fileId}/data_tables
  • Tags: DataTable Content

Returns a list of data tables. There are two scenarios when listing data tables of the specified file:

  1. If the file type is doc, this API returns all the inline data tables in the file.
  2. If the file type is data_table, this API returns all the tables.

Scopes: canvas_data_table:read

Granular Scopes: canvas:read:data_table

Rate Limit Label: LIGHT

Not supported in Gov cluster

Responses

Status: 200 **HTTP Status Code:** `200` Data table list returned.
Content-Type: application/json
  • data_tables (required)

    array — The data table list.

    Items:

    • data_table_id (required)

      string — The data table ID.

    • is_synced (required)

      boolean — Whether the table is synchronized. If `true`, the table is synchronized. If `false`, the table is the source table.

    • name (required)

      string — The table name.

    • integration

      object — If `integration` is not empty, the data in this table originates from external sources. This table has certain limitations: 1. Integrated columns cannot be edited, whereas user-created columns are editable. 2. Editing of rows is not permitted.

      • integration_type (required)

        string — The data integration type, such as `jira` and `meeting`.

      • marketplace_app_id

        string — If the data source originates from an app integrated via the marketplace, a `marketplace_app_id` is provided. If it does not originate from the marketplace, there is no `marketplace_app_id`.

    • related_table

      object — If `is_synced` is `true`, `related_table` contains the metadata of the related table.

      • data_table_id (required)

        string — The related data table ID.

      • file_id (required)

        string — The related file ID.

Example:

{
  "data_tables": [
    {
      "data_table_id": "6108696fe9b44dc3a2675a448ab0c338",
      "name": "Project tracker",
      "is_synced": false,
      "related_table": {
        "file_id": "Fk0XWCWSTJqgTDcxbAKLfQ",
        "data_table_id": "c7628bc10b5a458cb7b4af3747cbf32d"
      },
      "integration": {
        "marketplace_app_id": "wc9NSSgESB-qLJed0RSZjQ",
        "integration_type": "jira"
      }
    }
  ]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Invalid parameters.
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission denied. **Error Code:** `2009` <br> No permission to access or modify this resource. <br>
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/).

Update table metadata

  • Method: PATCH
  • Path: /docs/files/{fileId}/data_tables/{tableId}
  • Tags: DataTable Content

Update the table metadata, such as the title.

Scopes: canvas_data_table:update

Granular Scopes: canvas:update:data_table

Rate Limit Label: LIGHT

Not supported in Gov cluster

Request Body

Content-Type: application/json
  • title (required)

    string — The table title.

Example:

{
  "title": "Project Tracker"
}

Responses

Status: 204 Metadata updated successfully.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Invalid parameters.
Status: 403 **HTTP Status Code:** `403` <br> Forbidden No permission. **Error Code:** `2009` <br> No permission to access or modify this resource. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found File or data table not found. **Error Code:** `2000` <br> Table not found. <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/).

List columns

  • Method: GET
  • Path: /docs/files/{fileId}/data_tables/{tableId}/columns
  • Tags: DataTable Content

List the columns of a table.

Scopes: canvas_data_table:read

Granular Scopes: canvas:read:data_table

Rate Limit Label: LIGHT

Not supported in Gov cluster

Responses

Status: 200 Column list of the table.
Content-Type: application/json
  • columns (required)

    array — List of columns.

    Items:

    • column_id (required)

      string — The column ID.

    • column_type (required)

      string, possible values: "text", "number", "percent", "single_select", "multiple_select", "date", "people", "checkbox", "attachment", "reaction", "created_by", "updated_by", "created_time", "updated_time", "currency", "page", "url" — The type of the column.

    • integrated (required)

      boolean — If `true`, this column is an integrated column and cannot be edited by the user. If `false`, the user can edit it.

    • name (required)

      string — The column name.

    • column_options

      object — The corresponding relationship between column type and column option is as follows: `date`|`created_time`|`updated_time`: date_option `number`: number_option `currency`: currency_option `percent`: percent_option `url`: url_option `attachment`: attachment_option `reaction`: reaction_option `single_select`|`multiple_select`: select_option `people`: people_option Other column types do not have column options.

      • attachment_option

        object — `attachment` column option.

        • layout (required)

          string, possible values: "thumbnail", "full_width" — The attachment layout.

      • currency_option

        object — `currency` column option.

        • decimal (required)

          integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

        • format (required)

          string, possible values: "accounting", "currency" — The currency format.

        • symbol (required)

          string, possible values: "$", "¥", "€", "Ft", "Rp", "kr", "R", "CHF", "DH", "₹", "zł", "₽", "₩", "฿", "₺", "£" — The currency symbol.

      • date_option

        object — `date`|`created_time`|`updated_time` column option.

        • format (required)

          string, possible values: "MM/dd/yyyy", "MM/dd/yy", "M/d/yyyy", "yy-MM-dd", "yyyy/MM/dd", "yy/MM/dd", "yyyy/M/d", "yy/M/d", "dd/MM/yyyy", "dd/MM/yy", "MMM d, yyyy", "EEE, MMM d", "EEE, MMM d, yyyy", "EEE" — Date display format. Examples are provided below: 2025-10-21 12:00 2025/10/21 12:00 2025/10/21 00:00 25-10-21 00:30 10/21/2025 00:30 10/21/25 00:30 08/10/2025 01:00 08/10/25 01:00

        • is_24_hour_format (required)

          boolean — If `true`, display in 24-hour format. If `false`, display in 12-hour format.

      • number_option

        object — `number` column option.

        • decimal (required)

          integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

        • show_separator (required)

          boolean — If `true`, display thousand separators. If `false`, do not display thousand separators.

      • people_option

        object — `people` column option.

        • is_multiple (required)

          boolean — If `true`, allow selection of multiple people. If `false`, only one person can be selected.

        • is_notify (required)

          boolean — If `true`, send a notification message after selecting someone. If `false`, do not send a notification message after selecting someone.

      • percent_option

        object — `percent` column option.

        • decimal (required)

          integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

        • show_progress_bar (required)

          boolean — If `true`, display the progress bar. If `false`, do not display the progress bar.

      • reaction_option

        object — `reaction` column option.

        • allow_commenter_react (required)

          boolean — If `true`, users with only commenter permission are allowed to react. If `false`, users with only commenter permission are not allowed to react.

        • display_type (required)

          string, possible values: "number", "people", "none" — The reaction icon display type.

        • icon (required)

          object — The icon content.

          • type (required)

            string, possible values: "emoji" — The icon display type. Currently only supports `emoji`.

          • value (required)

            string, possible values: "👍", "👎", "🌟" — The icon value.

      • select_option

        object — `single_select` and `multiple_select` column option.

        • options (required)

          array — The option list.

          Items:

          • option_id

            string — The option ID.

          • option_name

            string — The option name.

      • url_option

        object — `url` column option.

        • display_type (required)

          string, possible values: "title", "full", "icon" — The URL display type.

        • open_type (required)

          string, possible values: "current_page", "new_page" — The URL open type.

    • description

      string — Column Description

Example:

{
  "columns": [
    {
      "name": "Text",
      "column_type": "text",
      "description": "Text Content",
      "column_options": {
        "date_option": {
          "format": "MM/dd/yyyy",
          "is_24_hour_format": false
        },
        "number_option": {
          "decimal": 1,
          "show_separator": false
        },
        "select_option": {
          "options": [
            {
              "option_name": "Blue",
              "option_id": "A8xSJQDVf1dnVIVh"
            }
          ]
        },
        "percent_option": {
          "decimal": 1,
          "show_progress_bar": false
        },
        "people_option": {
          "is_multiple": false,
          "is_notify": false
        },
        "reaction_option": {
          "icon": {
            "type": "emoji",
            "value": "👍"
          },
          "display_type": "number",
          "allow_commenter_react": false
        },
        "currency_option": {
          "decimal": 1,
          "symbol": "$",
          "format": "accounting"
        },
        "attachment_option": {
          "layout": "thumbnail"
        },
        "url_option": {
          "display_type": "title",
          "open_type": "current_page"
        }
      },
      "column_id": "dd08972e3bca46b89ba7bf0c9ee32ff5",
      "integrated": false
    }
  ]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Invalid parameters.
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission denied. **Error Code:** `2009` <br> No permission to access or modify this resource. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found File or table not found. **Error Code:** `2000` <br> Block not found. <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 column

  • Method: POST
  • Path: /docs/files/{fileId}/data_tables/{tableId}/columns
  • Tags: DataTable Content

Add a new column to the table. A table allows up to 200 columns.

Scopes: canvas_data_table:write

Granular Scopes: canvas:write:data_table

Rate Limit Label: MEDIUM

Not supported in Gov cluster

Request Body

Content-Type: application/json
  • column_type (required)

    string, possible values: "text", "number", "percent", "single_select", "multiple_select", "date", "people", "checkbox", "attachment", "reaction", "created_by", "updated_by", "created_time", "updated_time", "currency", "page", "url" — The type of the column.

  • name (required)

    string — The name of the column. Must be unique within the same table.

  • column_options

    object — The corresponding relationship between column type and column option is as follows: `date`|`created_time`|`updated_time`: date_option `number`: number_option `currency`: currency_option `percent`: percent_option `url`: url_option `attachment`: attachment_option `reaction`: reaction_option `single_select`|`multiple_select`: select_option `people`: people_option Other column types do not have a column option.

    • attachment_option

      object — The `attachment` column option.

      • layout (required)

        string, possible values: "thumbnail", "full_width" — The attachment layout.

    • currency_option

      object — The `currency` column option.

      • decimal (required)

        integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

      • format (required)

        string, possible values: "accounting", "currency" — The currency format.

      • symbol (required)

        string, possible values: "$", "¥", "€", "Ft", "Rp", "kr", "R", "CHF", "DH", "₹", "zł", "₽", "₩", "฿", "₺", "£" — The currency symbol.

    • date_option

      object — The `date`|`created_time`|`updated_time` column option.

      • format (required)

        string, possible values: "MM/dd/yyyy", "MM/dd/yy", "M/d/yyyy", "yy-MM-dd", "yyyy/MM/dd", "yy/MM/dd", "yyyy/M/d", "yy/M/d", "dd/MM/yyyy", "dd/MM/yy", "MMM d, yyyy", "EEE, MMM d", "EEE, MMM d, yyyy", "EEE" — The date display format. Examples are as follows: 2025-10-21 12:00 2025/10/21 12:00 2025/10/21 00:00 25-10-21 00:30 10/21/2025 00:30 10/21/25 00:30 08/10/2025 01:00 08/10/25 01:00

      • is_24_hour_format (required)

        boolean — If `true`, display in 24-hour format. If `false`, display in 12-hour format.

    • number_option

      object — The `number` column option.

      • decimal (required)

        integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

      • show_separator (required)

        boolean — If `true`, display thousand separators. If `false`, do not display thousand separators.

    • people_option

      object — The `people` column option.

      • is_multiple (required)

        boolean — If `true`, allow selection of multiple people. If `false`, only one person can be selected.

      • is_notify (required)

        boolean — If `true`, send a notification message after selecting someone. If `false`, do not send a notification message after selecting someone.

    • percent_option

      object — The `percent` column option.

      • decimal (required)

        integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

      • show_progress_bar (required)

        boolean — If `true`, display the progress bar. If `false`, do not display the progress bar.

    • reaction_option

      object — The `reaction` column option.

      • allow_commenter_react (required)

        boolean — Whether a user with only commenter permission is allowed to click. If `true`, the user is allowed to click. If `false`, the user is not allowed to click.

      • display_type (required)

        string, possible values: "number", "people", "none" — The reaction icon display type.

      • icon (required)

        object — The icon content.

        • type (required)

          string, possible values: "emoji" — The icon display type. Currently only supports emoji.

        • value (required)

          string, possible values: "👍", "👎", "🌟" — The icon value.

    • select_option

      object — The `single_select` and `multiple_select` column option.

      • options

        array — The option list.

        Items:

        • name

          string — The option name.

    • url_option

      object — The `url` column option.

      • display_type (required)

        string, possible values: "title", "full", "icon" — The URL display type.

      • open_type (required)

        string, possible values: "current_page", "new_page" — The URL open type.

  • description

    string — Column description

Example:

{
  "name": "column name",
  "description": "column description",
  "column_type": "text",
  "column_options": {
    "date_option": {
      "format": "MM/dd/yyyy",
      "is_24_hour_format": false
    },
    "number_option": {
      "decimal": 1,
      "show_separator": false
    },
    "select_option": {
      "options": [
        {
          "name": "Blue"
        }
      ]
    },
    "percent_option": {
      "decimal": 1,
      "show_progress_bar": false
    },
    "people_option": {
      "is_multiple": false,
      "is_notify": false
    },
    "reaction_option": {
      "icon": {
        "type": "emoji",
        "value": "👍"
      },
      "display_type": "number",
      "allow_commenter_react": false
    },
    "currency_option": {
      "decimal": 1,
      "symbol": "$",
      "format": "accounting"
    },
    "attachment_option": {
      "layout": "thumbnail"
    },
    "url_option": {
      "display_type": "title",
      "open_type": "current_page"
    }
  }
}

Responses

Status: 201 **HTTP Status Code:** `201` Created. The new column of the data table is returned.
Content-Type: application/json
  • column_id (required)

    string — The ID of the column.

  • column_type (required)

    string, possible values: "text", "number", "percent", "single_select", "multiple_select", "date", "people", "checkbox", "attachment", "reaction", "created_by", "updated_by", "created_time", "updated_time", "currency", "page", "url" — The type of the column.

  • integrated (required)

    boolean — If `true`, this column is an integrated column and cannot be edited by the user. If `false`, the user can edit it.

  • name (required)

    string — The name of the column.

  • column_options

    object — The corresponding relationship between column type and column option is as follows: `date`|`created_time`|`updated_time`: date_option `number`: number_option `currency`: currency_option `percent`: percent_option `url`: url_option `attachment`: attachment_option `reaction`: reaction_option `single_select`|`multiple_select`: select_option `people`: people_option Other column types do not have a column option.

    • attachment_option

      object — The `attachment` column option.

      • layout (required)

        string, possible values: "thumbnail", "full_width" — The attachment layout.

    • currency_option

      object — The `currency` column option.

      • decimal (required)

        integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

      • format (required)

        string, possible values: "accounting", "currency" — The currency format.

      • symbol (required)

        string, possible values: "$", "¥", "€", "Ft", "Rp", "kr", "R", "CHF", "DH", "₹", "zł", "₽", "₩", "฿", "₺", "£" — The currency symbol.

    • date_option

      object — The `date`|`created_time`|`updated_time` column option.

      • format (required)

        string, possible values: "MM/dd/yyyy", "MM/dd/yy", "M/d/yyyy", "yy-MM-dd", "yyyy/MM/dd", "yy/MM/dd", "yyyy/M/d", "yy/M/d", "dd/MM/yyyy", "dd/MM/yy", "MMM d, yyyy", "EEE, MMM d", "EEE, MMM d, yyyy", "EEE" — The date display format. Specific examples are as follows: 2025-10-21 12:00 2025/10/21 12:00 2025/10/21 00:00 25-10-21 00:30 10/21/2025 00:30 10/21/25 00:30 08/10/2025 01:00 08/10/25 01:00

      • is_24_hour_format (required)

        boolean — If `true`, display in 24-hour format. If `false`, display in 12-hour format.

    • number_option

      object — The `number` column option.

      • decimal (required)

        integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

      • show_separator (required)

        boolean — If `true`, display thousand separators. If `false`, do not display thousand separators.

    • people_option

      object — The `people` column option.

      • is_multiple (required)

        boolean — If `true`, allow selection of multiple people. If `false`, only one person can be selected.

      • is_notify (required)

        boolean — If `true`, send a notification message after selecting someone. If `false`, do not send a notification message after selecting someone.

    • percent_option

      object — The `percent` column option.

      • decimal (required)

        integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

      • show_progress_bar (required)

        boolean — If `true`, display the progress bar. If `false`, do not display the progress bar.

    • reaction_option

      object — The `reaction` column option.

      • allow_commenter_react (required)

        boolean — Whether a user with only commenter permission is allowed to click. If `true`, the user is allowed to click. If `false`, the user is not allowed to click.

      • display_type (required)

        string, possible values: "number", "people", "none" — The reaction icon display type.

      • icon (required)

        object — The icon content.

        • type (required)

          string, possible values: "emoji" — The icon display type. Currently only supports emoji.

        • value (required)

          string, possible values: "👍", "👎", "🌟" — The icon value.

    • select_option

      object — The `single_select` and `multiple_select` column option.

      • options

        array — The option list.

        Items:

        • id

          string — The ID of an option.

        • name

          string — The name of an option.

    • url_option

      object — The `url` column option.

      • display_type (required)

        string, possible values: "title", "full", "icon" — The URL display type.

      • open_type (required)

        string, possible values: "current_page", "new_page" — The URL open type.

  • description

    string — Column Description

Example:

{
  "column_id": "cacdc418655a4d5b8ca6c6b5e5dab07b",
  "name": "Text",
  "description": "Text Content",
  "column_type": "text",
  "column_options": {
    "date_option": {
      "format": "MM/dd/yyyy",
      "is_24_hour_format": false
    },
    "number_option": {
      "decimal": 1,
      "show_separator": false
    },
    "select_option": {
      "options": [
        {
          "name": "Blue",
          "id": "h45x4NDzVprZUu6t"
        }
      ]
    },
    "percent_option": {
      "decimal": 1,
      "show_progress_bar": false
    },
    "people_option": {
      "is_multiple": false,
      "is_notify": false
    },
    "reaction_option": {
      "icon": {
        "type": "emoji",
        "value": "👍"
      },
      "display_type": "number",
      "allow_commenter_react": false
    },
    "currency_option": {
      "decimal": 1,
      "symbol": "$",
      "format": "accounting"
    },
    "attachment_option": {
      "layout": "thumbnail"
    },
    "url_option": {
      "display_type": "title",
      "open_type": "current_page"
    }
  },
  "integrated": false
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Invalid parameters. **Error Code:** `2012` <br> Unsupported column type. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission denied. **Error Code:** `2009` <br> No permission to access or modify this resource. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found File or data table 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/).

Delete a column

  • Method: DELETE
  • Path: /docs/files/{fileId}/data_tables/{tableId}/columns/{columnId}
  • Tags: DataTable Content

Delete a column from a table.

Scopes: canvas_data_table:delete

Granular Scopes: canvas:delete:data_table

Rate Limit Label: MEDIUM

Not supported in Gov cluster

Responses

Status: 204 Column deleted successfully.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Invalid parameters.
Status: 403 **HTTP Status Code:** `403` <br> Forbidden No permission. **Error Code:** `2009` <br> No permission to access or modify this resource. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found Table or column not found. **Error Code:** `2000` <br> Block not found. <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/).

Update a column

  • Method: PATCH
  • Path: /docs/files/{fileId}/data_tables/{tableId}/columns/{columnId}
  • Tags: DataTable Content

Update a column.

Scopes: canvas_data_table:update

Granular Scopes: canvas:update:data_table

Rate Limit Label: MEDIUM

Not supported in Gov cluster

Request Body

Content-Type: application/json
  • column_options

    object — When updating columns, update only the necessary options; there is no need to update all of them. The corresponding relationship between column type and column option is as follows: `date`|`created_time`|`updated_time`: date_option `number`: number_option `currency`: currency_option `percent`: percent_option `url`: url_option `attachment`: attachment_option `reaction`: reaction_option `single_select`|`multiple_select`: select_option `people`: people_option Other column types do not have a column option.

    • attachment_option

      object — The `attachment` column option.

      • layout (required)

        string, possible values: "thumbnail", "full_width" — The attachment layout.

    • currency_option

      object — The `currency` column option.

      • decimal (required)

        integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

      • format (required)

        string, possible values: "accounting", "currency" — The currency format.

      • symbol (required)

        string, possible values: "$", "¥", "€", "Ft", "Rp", "kr", "R", "CHF", "DH", "₹", "zł", "₽", "₩", "฿", "₺", "£" — The currency symbol.

    • date_option

      object — The `date`|`created_time`|`updated_time` column option.

      • format (required)

        string, possible values: "MM/dd/yyyy", "MM/dd/yy", "M/d/yyyy", "yy-MM-dd", "yyyy/MM/dd", "yy/MM/dd", "yyyy/M/d", "yy/M/d", "dd/MM/yyyy", "dd/MM/yy", "MMM d, yyyy", "EEE, MMM d", "EEE, MMM d, yyyy", "EEE" — The date display format. Specific examples are as follows: 2025-10-21 12:00 2025/10/21 12:00 2025/10/21 00:00 25-10-21 00:30 10/21/2025 00:30 10/21/25 00:30 08/10/2025 01:00 08/10/25 01:00

      • is_24_hour_format (required)

        boolean — If `true`, display in 24-hour format. If `false`, display in 12-hour format.

    • number_option

      object — The `number` column option.

      • decimal (required)

        integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

      • show_separator (required)

        boolean — If `true`, display thousand separators. If `false`, do not display thousand separators.

    • people_option

      object — The `people` column option.

      • is_multiple (required)

        boolean — If `true`, allow selection of multiple people. If `false`, only one person can be selected.

      • is_notify (required)

        boolean — If `true`, send a notification message after selecting someone. If `false`, do not send a notification message after selecting someone.

    • percent_option

      object — The `percent` column option.

      • decimal (required)

        integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

      • show_progress_bar (required)

        boolean — If `true`, display the progress bar. If `false`, do not display the progress bar.

    • reaction_option

      object — The `reaction` column option.

      • allow_commenter_react (required)

        boolean — Whether a user with only commenter permission is allowed to click. If `true`, the user is allowed to click. If `false`, the user is not allowed to click.

      • display_type (required)

        string, possible values: "number", "people", "none" — The reaction icon display type.

      • icon (required)

        object — The icon content.

        • type (required)

          string, possible values: "emoji" — The icon display type. Currently only supports emoji.

        • value (required)

          string, possible values: "👍", "👎", "🌟" — The icon value.

    • select_option

      object — The `single_select` and `multiple_select` column option. Only supports adding new options and modifying existing ones; deleting options is not supported.

      • create_options

        array — The list of new options to be added.

        Items:

        string — The option name.

      • update_options

        array — The list of options to be updated.

        Items:

        • option_id

          string — The option ID.

        • option_name

          string — The option name.

    • url_option

      object — The `url` column option.

      • display_type (required)

        string, possible values: "title", "full", "icon" — The URL display type.

      • open_type (required)

        string, possible values: "current_page", "new_page" — The URL open type.

  • column_type

    string, possible values: "text", "number", "percent", "single_select", "multiple_select", "date", "people", "checkbox", "attachment", "reaction", "created_by", "updated_by", "created_time", "updated_time", "currency", "page", "url" — If the column type needs to be modified, pass the new column type here. If the target column type requires column options, pass the column options as well.

  • description

    string — Column Description

  • name

    string — The column name.

Example:

{
  "name": "Text",
  "description": "Display national place names",
  "column_options": {
    "date_option": {
      "format": "MM/dd/yyyy",
      "is_24_hour_format": false
    },
    "number_option": {
      "decimal": 1,
      "show_separator": false
    },
    "select_option": {
      "create_options": [
        "Todo"
      ],
      "update_options": [
        {
          "option_id": "U9QOO6U4s8gBu0Zl",
          "option_name": "Done"
        }
      ]
    },
    "percent_option": {
      "decimal": 1,
      "show_progress_bar": false
    },
    "people_option": {
      "is_multiple": false,
      "is_notify": false
    },
    "reaction_option": {
      "icon": {
        "type": "emoji",
        "value": "👍"
      },
      "display_type": "number",
      "allow_commenter_react": false
    },
    "currency_option": {
      "decimal": 1,
      "symbol": "$",
      "format": "accounting"
    },
    "attachment_option": {
      "layout": "thumbnail"
    },
    "url_option": {
      "display_type": "title",
      "open_type": "current_page"
    }
  },
  "column_type": "text"
}

Responses

Status: 204 Successfully updated the column of the table.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Invalid parameters. **Error Code:** `2012` <br> Unsupported column type. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden No permission. **Error Code:** `2009` <br> Updating column type is not allowed. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found Data table or column not found. **Error Code:** `2000` <br> Block not found. <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 table rows

  • Method: POST
  • Path: /docs/files/{fileId}/data_tables/{tableId}/rows
  • Tags: DataTable Content

Add rows to a table. Create up to 10 rows at a time.

Scopes: canvas_data_table:write

Granular Scopes: canvas:write:data_table

Rate Limit Label: MEDIUM

Not supported in Gov cluster

Request Body

Content-Type: application/json
  • rows (required)

    array — Array of table rows.

    Items:

    • cells (required)

      array — Array of cell values in a row.

      Items:

      • column_name (required)

        string — The column name. Each cell value corresponds to a column.

      • value (required)

        object — A single `column_name` corresponds to only one `value`, and the relationship between each `value` and its `column_type` is as follows: `text`: `text` column `number`: `number` column `currency`: `currency` column `percent`: `percent` column `date`: `date` column `url`: `url` column `people`: `people` column `reaction`: `reaction` column `attachment`: `attachment` column `single_select`: `single_select` column `multiple_select`: `multiple_select` column `checkbox`: `checkbox` column `page`, `relation`, `formula`, and `rollup` cell values are not supported. The `created_time`, `updated_time`, `created_by`, and `updated_by` values are automatically generated by the system.

        • attachment

          array — The `attachment` cell value. You must first call the [Upload file for docs import or attachments](/docs/api-reference/zoom-api/methods#operation/uploadDocsFile) API to upload the attachment, get the **attachment_id**, and then fill it into the cell value. Multiple **attachment_id** values can be specified. Image attachments are not allowed.

          Items:

          • attachment_id

            string — The attachment ID.

        • checkbox

          boolean — The `checkbox` cell value. Whether the checkbox is checked: `true` or `false`.

        • currency

          number — The `currency` cell value.

        • date

          string — The `date` cell value. An ISO 8601 formatted date string in UTC.

        • multiple_select

          array — The `multiple_select` cell value.

          Items:

          string

        • number

          number — The `number` cell value.

        • people

          array — The `people` cell value. If the `people` column's `is_multiple` is `true`, multiple people entries can be specified; otherwise, only one is allowed.

          Items:

          • user_id

            string — The user ID.

        • percent

          number — The `percent` cell value. The calculation is based on percentage. For example, 200 represents 200%, and 1 represents 1%.

        • reaction

          string, possible values: "click", "unclick" — The `reaction` cell value.

        • single_select

          string — The `single_select` cell value.

        • text

          string — The `text` cell value.

        • url

          string — The `url` cell value.

Example:

{
  "rows": [
    {
      "cells": [
        {
          "column_name": "Text",
          "value": {
            "text": "Hello World!",
            "number": 12.14,
            "percent": 200,
            "single_select": "Male",
            "multiple_select": [
              "Male"
            ],
            "date": "2025-07-03T05:52:37Z",
            "people": [
              {
                "user_id": "U3OwWitcRAShLhbG4ChXNQ"
              }
            ],
            "checkbox": false,
            "reaction": "click",
            "currency": 20000,
            "url": "https://www.google.com",
            "attachment": [
              {
                "attachment_id": "ql62c9GzTdywOfRiaj6imQ"
              }
            ]
          }
        }
      ]
    }
  ]
}

Responses

Status: 201 **HTTP Status Code:** `201` Created rows of the data table returned.
Content-Type: application/json
  • rows

    array — Array of table rows.

    Items:

    • cells (required)

      array — Array of cell values in a row.

      Items:

      • column_name (required)

        string — The column name. Each cell value corresponds to a column.

      • value (required)

        object — The column types corresponding to each cell value are as follows: `text`: `text` column `number`: `number` column `currency`: `currency` column `percent`: `percent` column `date`: `date` column `url`: `url` column `people`: `people` column `reaction`: `reaction` column `attachment`: `attachment` column `single_select`: `single_select` column `multiple_select`: `multiple_select` column `checkbox`: `checkbox` column `page`, `relation`, `formula`, and `rollup` cell values are not supported. The `created_time`, `updated_time`, `created_by`, and `updated_by` values are automatically generated by the system.

        • attachment

          array — The `attachment` cell value. You must first call the [Upload file for docs import or attachments](/docs/api-reference/zoom-api/methods#operation/uploadDocsFile) API to upload the attachment, get the **attachment_id**, and then fill it into the cell value. Multiple **attachment_id** values can be specified. Image attachments are not allowed.

          Items:

          • attachment_id

            string — The attachment ID.

          • name

            string — The attachment name.

          • type

            string — The attachment type.

        • checkbox

          boolean — The `checkbox` cell value. Whether the checkbox is checked: `true` or `false`.

        • currency

          number — The `currency` cell value.

        • date

          string — The `date` cell value. An ISO 8601 formatted date string in UTC.

        • multiple_select

          array — The `multiple_select` cell value.

          Items:

          string

        • number

          number — The `number` cell value.

        • people

          array — The `people` cell value. If the `people` column's `is_multiple` is `true`, multiple people entries can be specified; otherwise, only one is allowed.

          Items:

          • user_id

            string — The user ID.

          • user_name

            string — The user name.

        • percent

          number — The `percent` cell value. The calculation is based on percentage. For example, 200 represents 200%, and 1 represents 1%.

        • reaction

          array — The `reaction` cell value.

          Items:

          • user_id

            string — The user ID.

          • user_name

            string — The user name.

        • single_select

          string — The `single_select` cell value.

        • text

          string — The `text` cell value.

        • url

          string — The `url` cell value.

    • row_id (required)

      string — The row ID.

Example:

{
  "rows": [
    {
      "cells": [
        {
          "column_name": "Text",
          "value": {
            "text": "Hello World!",
            "number": 12.14,
            "percent": 200,
            "single_select": "Male",
            "multiple_select": [
              "Male"
            ],
            "date": "2025-07-03T05:52:37Z",
            "people": [
              {
                "user_id": "U3OwWitcRAShLhbG4ChXNQ",
                "user_name": "Jack Li"
              }
            ],
            "checkbox": false,
            "reaction": [
              {
                "user_id": "GUZs4XBmSXqP6WLfEl_PSg",
                "user_name": "Jack Li"
              }
            ],
            "currency": 20000,
            "url": "https://www.google.com",
            "attachment": [
              {
                "attachment_id": "ql62c9GzTdywOfRiaj6imQ",
                "name": "api.txt",
                "type": "txt"
              }
            ]
          }
        }
      ],
      "row_id": "f537cdc592524388ae6651f9e97fe860"
    }
  ]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Invalid parameters. **Error Code:** `2105` <br> Row count can not be greater than 10. <br> **Error Code:** `2026` <br> Invalid or inaccessible link URL. <br> **Error Code:** `2012` <br> Unsupported column type. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized User not found or authentication failed.
Status: 403 **HTTP Status Code:** `403` <br> Forbidden Permission denied. **Error Code:** `2009` <br> No permission to access or modify this resource. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found File or data table not found. **Error Code:** `2000` <br> Block not found. <br>
Status: 415 **HTTP Status Code:** `415` <br> Unsupported Media Type Unsupported image attachment.
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 rows

  • Method: DELETE
  • Path: /docs/files/{fileId}/data_tables/{tableId}/rows
  • Tags: DataTable Content

Batch delete rows. Delete up to 10 rows at a time.

Scopes: canvas_data_table:delete

Granular Scopes: canvas:delete:data_table

Rate Limit Label: MEDIUM

Not supported in Gov cluster

Responses

Status: 204 Rows deleted successfully.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Invalid Parameters.
Status: 403 **HTTP Status Code:** `403` <br> Forbidden No Permission. **Error Code:** `2009` <br> No permission to access or modify this resource. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found Table or Row not found. **Error Code:** `2000` <br> Table row not found. <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/).

Update rows

  • Method: PATCH
  • Path: /docs/files/{fileId}/data_tables/{tableId}/rows
  • Tags: DataTable Content

Update rows of the table. A maximum of 10 rows can be updated at one time.

Scopes: canvas_data_table:update

Granular Scopes: canvas:update:data_table

Rate Limit Label: MEDIUM

Not supported in Gov cluster

Request Body

Content-Type: application/json
  • rows (required)

    array — Array of table rows.

    Items:

    • cells (required)

      array — The list of cells to update in this row. Include only the columns whose values need to be changed. Columns that are not included remain unchanged.

      Items:

      • column_name (required)

        string — The column name. Each cell value corresponds to a column.

      • value (required)

        object — A single `column_name` corresponds to only one `value`, and the relationship between each `value` and its `column_type` is as follows: `text`: `text` column `number`: `number` column `currency`: `currency` column `percent`: `percent` column `date`: `date` column `url`: `url` column `people`: `people` column `reaction`: `reaction` column `attachment`: `attachment` column `single_select`: `single_select` column `multiple_select`: `multiple_select` column `checkbox`: `checkbox` column `page`, `relation`, `formula`, and `rollup` cell values are not supported. The `created_time`, `updated_time`, `created_by`, and `updated_by` values are automatically generated by the system.

        • attachment

          array — The `attachment` cell value. You must first call the `Upload file for docs import or attachments` API to upload the attachment, get the **attachment_id**, and then fill it into the cell value. Multiple **attachment_id** values can be specified. Image attachments are not allowed.

          Items:

          • attachment_id

            string — The attachment ID.

        • checkbox

          boolean — The `checkbox` cell value. Whether the checkbox is checked: `true` or `false`.

        • currency

          number — The `currency` cell value.

        • date

          string — The `date` cell value. The ISO 8601 formatted date string in UTC.

        • multiple_select

          array — The `multiple_select` cell value.

          Items:

          string

        • number

          number — The `number` cell value.

        • people

          array — The `people` cell value. If the `people` column's `is_multiple` is `true`, multiple people entries can be specified; otherwise, only one is allowed.

          Items:

          • user_id

            string — The user ID.

        • percent

          number — The `percent` cell value. The calculation is based on percentage. For example, 200 represents 200%, and 1 represents 1%.

        • reaction

          string, possible values: "click", "unclick" — The `reaction` cell value.

        • single_select

          string — The `single_select` cell value.

        • text

          string — The `text` cell value.

        • url

          string — The `url` cell value.

    • row_id (required)

      string — The row ID.

Example:

{
  "rows": [
    {
      "cells": [
        {
          "column_name": "Text",
          "value": {
            "text": "Hello World!",
            "number": 12.14,
            "percent": 200,
            "single_select": "Male",
            "multiple_select": [
              "Male"
            ],
            "date": "2025-07-03T05:52:37Z",
            "people": [
              {
                "user_id": "U3OwWitcRAShLhbG4ChXNQ"
              }
            ],
            "checkbox": false,
            "reaction": "click",
            "currency": 20000,
            "url": "https://www.google.com",
            "attachment": [
              {
                "attachment_id": "ql62c9GzTdywOfRiaj6imQ"
              }
            ]
          }
        }
      ],
      "row_id": "f537cdc592524388ae6651f9e97fe860"
    }
  ]
}

Responses

Status: 204 Rows updated successfully.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Invalid parameters. **Error Code:** `2000` <br> Block not found. <br> **Error Code:** `2105` <br> Row count cannot be greater than 10. <br> **Error Code:** `2026` <br> Invalid or inaccessible link URL. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized User not found or authentication failed.
Status: 403 **HTTP Status Code:** `403` <br> Forbidden No permission. **Error Code:** `2009` <br> No permission to access or modify this resource. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found Data table or rows not found. **Error Code:** `2000` <br> Block not found. <br>
Status: 415 **HTTP Status Code:** `415` <br> Unsupported Media Type Unsupported image attachment.
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).

Search rows

  • Method: POST
  • Path: /docs/files/{fileId}/data_tables/{tableId}/rows/query
  • Tags: DataTable Content

Retrieve rows from a table with pagination, sorting, field selection, and filtering. A maximum of 100 rows are returned at a time.

Scopes: canvas_data_table:read

Granular Scopes: canvas:read:data_table

Rate Limit Label: MEDIUM

Not supported in Gov cluster

Request Body

Content-Type: application/json
  • fields

    array — If provided, only the values of the specified fields are returned. If not provided, the values of all fields are returned.

    Items:

    string — The field name.

  • filters

    object — # Filter Structure ## 1. Logical Group (`and` / `or`) ```json { "and": [ { "column_name": "Status", "operator": "equal", "value": { "single_select": "Done" } }, { "column_name": "Priority", "operator": "greater_than", "value": { "number": 3 } } ] } ``` ## 2. Nested Group (max 2 levels) ```json { "and": [ { "column_name": "Status", "operator": "equal", "value": { "single_select": "Done" } }, { "or": [ { "column_name": "Priority", "operator": "equal", "value": { "number": 1 } }, { "column_name": "Priority", "operator": "equal", "value": { "number": 2 } } ] } ] } ``` --- # Condition Fields | Key | Type | Required | Description | | ---------- | -------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | `column_name` | `string` | **Yes** | The column name. | | `operator` | `string` | **Yes** | The filter operator (see below). | | `value` | `object` | No | The filter value. **Not required** when `operator` is `is_empty` or `is_not_empty`. Only **one key** should be set, matching the column type. | --- # Filter Operators | Operator | Description | | -------------------- | --------------------------------- | | `equal` | Equal to | | `not_equal` | Not equal to | | `greater_than` | Greater than | | `greater_than_equal` | Greater than or equal to | | `less_than` | Less than | | `less_than_equal` | Less than or equal to | | `contains` | Contains | | `not_contains` | Does not contain | | `is_empty` | Is empty (no `value` needed) | | `is_not_empty` | Is not empty (no `value` needed) | | `starts_with` | Starts with | | `ends_with` | Ends with | | `contains_any_of` | Contains any of the given values | | `contains_none_of` | Contains none of the given values | | `contains_all_of` | Contains all of the given values | --- # Value Format by Column Type ## `text` - **Format:** `{ "text": "Hello World!" }` - **Operators:** `is_empty`, `is_not_empty`, `equal`, `not_equal`, `contains`, `not_contains`, `starts_with`, `ends_with` ## `number` - **Format:** `{ "number": 12.14 }` - **Operators:** `is_empty`, `is_not_empty`, `equal`, `not_equal`, `greater_than`, `greater_than_equal`, `less_than`, `less_than_equal` ## `percent` - **Format:** `{ "percent": 200 }` - **Note:** 200 means 200%, 1 means 1%. - **Operators:** Same as `number`. ## `currency` - **Format:** `{ "currency": 20000 }` - **Operators:** Same as `number`. ## `single_select` - **Format:** `{ "single_select": "Male" }` - **Note:** Value is the **option name**. - **Operators:** `is_empty`, `is_not_empty`, `equal`, `not_equal`, `contains_any_of`, `contains_none_of` ## `multiple_select` - **Format:** `{ "multiple_select": ["Tag1", "Tag2"] }` - **Note:** Value is an **array of option names**. - **Operators:** `is_empty`, `is_not_empty`, `equal`, `contains_any_of`, `contains_all_of`, `contains_none_of` ## `date` - **Format:** `{ "date": { "mode": "<mode>", "value": "<value>" } }` - **`mode` is required.** The `value` field depends on the mode: | Mode | `value` | Example | | ------------- | ----------------------------- | -------------------------------------------------------- | | `exactly` | ISO 8601 date string | `{ "mode": "exactly", "value": "2025-07-03T05:52:37Z" }` | | `past` | Number of days ago (string) | `{ "mode": "past", "value": "3" }` | | `next` | Number of days ahead (string) | `{ "mode": "next", "value": "7" }` | | `today` | Not required | `{ "mode": "today" }` | | `yesterday` | Not required | `{ "mode": "yesterday" }` | | `tomorrow` | Not required | `{ "mode": "tomorrow" }` | | `currentweek` | Not required | `{ "mode": "currentweek" }` | - **Operators:** `is_empty`, `is_not_empty`, `equal`, `not_equal`, `greater_than`, `greater_than_equal`, `less_than`, `less_than_equal` - **Examples:** - Greater than current week: `"operator": "greater_than"`, `"value": { "date": { "mode": "currentweek" } }` - Less than a specific date: `"operator": "less_than"`, `"value": { "date": { "mode": "exactly", "value": "2025-07-03T05:52:37Z" } }` - Greater than 3 days ago: `"operator": "greater_than"`, `"value": { "date": { "mode": "past", "value": "3" } }` ## `people` - **Format:** `{ "people": ["U3OwWitcRAShLhbG4ChXNQ"] }` - **Note:** Value is an **array of user IDs**. - **Operators:** `is_empty`, `is_not_empty`, `equal`, `not_equal`, `contains_any_of`, `contains_none_of` ## `checkbox` - **Format:** `{ "checkbox": false }` - **Operators:** `equal` ## `reaction` - **Format:** `{ "reaction": 12 }` - **Note:** Value is the **click count** (integer). - **Operators:** `is_empty`, `is_not_empty`, `equal`, `not_equal`, `greater_than`, `greater_than_equal`, `less_than`, `less_than_equal` ## `url` - **Format:** `{ "url": "https://www.google.com" }` - **Operators:** `is_empty`, `is_not_empty`, `equal`, `not_equal`, `contains`, `not_contains`, `starts_with`, `ends_with` ## `attachment` - **Format:** `{ "attachment": "document.txt" }` - **Note:** Filtering is based on the **file name**. - **Operators:** `is_empty`, `is_not_empty`, `equal`, `not_equal`, `contains`, `not_contains`, `starts_with`, `ends_with`

  • sort

    array — The list of sorting rules.

    Items:

    • column_name (required)

      string — The column name to sort by.

    • order (required)

      string, possible values: "desc", "asc" — The sort order.

Example:

{
  "filters": {},
  "fields": [
    "Task"
  ],
  "sort": [
    {
      "column_name": "Priority",
      "order": "asc"
    }
  ]
}

Responses

Status: 200 Successfully searched rows.
Content-Type: application/json
  • rows (required)

    array — The array of queried rows.

    Items:

    • cells (required)

      array — The array of cell values in the row.

      Items:

      • column_name (required)

        string — The column name. Each cell value corresponds to a column.

      • value (required)

        object — The column types corresponding to each cell value are as follows: `text`: `text` column `number`: `number` column `currency`: `currency` column `percent`: `percent` column `date`: `date` column `url`: `url` column `people`: `people` column `reaction`: `reaction` column `attachment`: `attachment` column `single_select`: `single_select` column `multiple_select`: `multiple_select` column `checkbox`: `checkbox` column `page`, `relation`, `formula`, and `rollup` cell values are not supported. The `created_time`, `updated_time`, `created_by`, and `updated_by` values are automatically generated by the system.

        • attachment

          array — The `attachment` cell value. You must first call the [Upload file for docs import or attachments](/docs/api-reference/zoom-api/methods#operation/uploadDocsFile) API to upload the attachment, get the **attachment_id**, and then fill it into the cell value. Multiple **attachment_id** values can be specified. Image attachments are not allowed.

          Items:

          • attachment_id

            string — The attachment ID.

          • name

            string — The attachment name.

          • type

            string — The attachment type.

        • checkbox

          boolean — The `checkbox` cell value. Whether the checkbox is checked: `true` or `false`.

        • currency

          number — The `currency` cell value.

        • date

          string — The `date` cell value. An ISO 8601 formatted date string in UTC.

        • multiple_select

          array — The `multiple_select` cell value.

          Items:

          string

        • number

          number — The `number` cell value.

        • people

          array — The `people` cell value. If the `people` column's `is_multiple` is `true`, multiple people entries can be specified; otherwise, only one is allowed.

          Items:

          • user_id

            string — The user ID.

          • user_name

            string — The user name.

        • percent

          number — The `percent` cell value. The calculation is based on percentage. For example, 200 represents 200%, and 1 represents 1%.

        • reaction

          array — The `reaction` cell value.

          Items:

          • user_id

            string — The user ID.

          • user_name

            string — The user name.

        • single_select

          string — The `single_select` cell value.

        • text

          string — The `text` cell value.

        • url

          string — The `url` cell value.

    • row_id (required)

      string — The row ID.

  • total_records (required)

    number — The total number of rows matching the query condition.

  • next_page_token

    string — If `next_page_token` is not empty, it indicates that there are more results. Use this token in the next request to retrieve the next page of results.

Example:

{
  "next_page_token": "Tva2CuIdTgsv8wAnhyAdU3m06Y2HuLQtlh3",
  "total_records": 50,
  "rows": [
    {
      "cells": [
        {
          "column_name": "Text",
          "value": {
            "text": "Hello World!",
            "number": 12.14,
            "percent": 200,
            "single_select": "Male",
            "multiple_select": [
              "Male"
            ],
            "date": "2025-07-03T05:52:37Z",
            "people": [
              {
                "user_id": "U3OwWitcRAShLhbG4ChXNQ",
                "user_name": "Jack Li"
              }
            ],
            "checkbox": false,
            "reaction": [
              {
                "user_id": "GUZs4XBmSXqP6WLfEl_PSg",
                "user_name": "Jack Li"
              }
            ],
            "currency": 20000,
            "url": "https://www.google.com",
            "attachment": [
              {
                "attachment_id": "ql62c9GzTdywOfRiaj6imQ",
                "name": "api.txt",
                "type": "txt"
              }
            ]
          }
        }
      ],
      "row_id": "f537cdc592524388ae6651f9e97fe860"
    }
  ]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Invalid parameters. **Error Code:** `2012` <br> Unsupported column type. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden No permission. **Error Code:** `2009` <br> No permission to access or modify this resource. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found Table or rows not found. **Error Code:** `2000` <br> Block not found. <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/).

Insert blocks into a document

  • Method: POST
  • Path: /docs/files/{fileId}/blocks
  • Tags: Doc Content

Insert new blocks at a specific position in a document. Accepts XML-formatted block content and supports positioning above, below, or inside a specific parent block. Use the Get file content endpoint with the query parameter format=xml first to fetch the document structure and block IDs.

Scopes: docs_content:write

Granular Scopes: docs:write:content

Rate Limit Label: LIGHT

Not supported in Gov cluster

Request Body

Content-Type: application/json
  • blocks (required)

    string — XML string containing block content. See the [Zoom Docs XML Format Specification](https://developers.zoom.us/docs/zoom-docs/doc-format-specification) for supported block types and syntax.

  • positioning

    object — Block positioning options. At most one of `above_block_id`, `below_block_id`, or `parent_block_id` should be specified. If none are specified, blocks are appended to the end of the document.

    • above_block_id

      string — Block ID to insert above (mutually exclusive with below)

    • below_block_id

      string — Block ID to insert below (mutually exclusive with above)

    • parent_block_id

      string — Parent block ID. Inserts at the end of this parent's children.

Example:

{
  "positioning": {
    "above_block_id": "8d0ad8e130e14d44",
    "below_block_id": "8d0ad8e130e14d44",
    "parent_block_id": "a1b2c3d4e5f6"
  },
  "blocks": "<text>New content</text>"
}

Responses

Status: 201 Successfully inserted blocks.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2000` <br> Block not found. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `4000` <br> File not found. <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/).

Replace a range of blocks

  • Method: POST
  • Path: /docs/files/{fileId}/blocks/replace_range
  • Tags: Doc Content

Replace a contiguous range of sibling blocks with new blocks in a single atomic operation. All blocks between start and end (inclusive) are removed and replaced with the provided XML block content. Important: start_block_id and end_block_id must be direct children of the same parent block (siblings). If they are not siblings, the operation will fail. Use the Get file content endpoint to verify the document structure before calling this endpoint.

Scopes: docs_content:update

Granular Scopes: docs:update:content

Rate Limit Label: LIGHT

Not supported in Gov cluster

Request Body

Content-Type: application/json
  • blocks (required)

    string — XML string containing block content. See the [Zoom Docs XML Format Specification](https://developers.zoom.us/docs/zoom-docs/doc-format-specification) for supported block types and syntax.

  • end_block_id (required)

    string — Block ID of the last block in the range.

  • start_block_id (required)

    string — Block ID of the first block in the range.

Example:

{
  "blocks": "<text>New content</text>",
  "start_block_id": "a1b2c",
  "end_block_id": "d4e5f"
}

Responses

Status: 204 Successfully replaced the specified block range with new blocks.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2000` <br> Block not found. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `4000` <br> File not found. <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/).

Delete a specific block

  • Method: DELETE
  • Path: /docs/files/{fileId}/blocks/{blockId}
  • Tags: Doc Content

Deletes a block and all its content from the document.

Granular Scopes: docs:delete:content

Rate Limit Label: LIGHT

Not supported in Gov cluster

Responses

Status: 204 Successfully deleted the block.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2000` <br> Block not found. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `4000` <br> File not found. <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/).

Update a specific block

  • Method: PATCH
  • Path: /docs/files/{fileId}/blocks/{blockId}
  • Tags: Doc Content

Updates the content of an existing block using XML-formatted content. Keeps the existing block type and replaces the content. To change the block type, use ReplaceBlockRange.

Scopes: docs_content:update

Granular Scopes: docs:update:content

Rate Limit Label: LIGHT

Not supported in Gov cluster

Request Body

Content-Type: application/json

Example:

{
  "block": "<text>New content</text>"
}

Responses

Status: 204 Block updated successfully.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `2000` <br> Block not found. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `4000` <br> File not found. <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 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
  • data_table

    object — The data table schema information.

    • columns

      array — The `columns` parameter is ignored when `file_type` is not `data_table`. When `file_type` is `data_table`, users can provide custom columns. If none are provided, three default columns—`text`, `people`, and `single_select`—along with a grid view will be created.

      Items:

      • column_type (required)

        string, possible values: "text", "number", "percent", "single_select", "multiple_select", "date", "people", "checkbox", "attachment", "reaction", "created_by", "updated_by", "created_time", "updated_time", "currency", "page", "url" — The type of the column.

      • name (required)

        string — The column name.

      • column_options

        object — The corresponding relationship between column type and column option is as follows: `date`|`created_time`|`updated_time`: date_option `number`: number_option `currency`: currency_option `percent`: percent_option `url`: url_option `attachment`: attachment_option `reaction`: reaction_option `single_select`|`multiple_select`: select_option `people`: people_option Other column types do not have a column option.

        • attachment_option

          object — The `attachment` column option.

          • layout (required)

            string, possible values: "thumbnail", "full_width" — The attachment layout.

        • currency_option

          object — The `currency` column option.

          • decimal (required)

            integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

          • format (required)

            string, possible values: "accounting", "currency" — The currency format.

          • symbol (required)

            string, possible values: "$", "¥", "€", "Ft", "Rp", "kr", "R", "CHF", "DH", "₹", "zł", "₽", "₩", "฿", "₺", "£" — The currency symbol.

        • date_option

          object — The `date`|`created_time`|`updated_time` column option.

          • format (required)

            string, possible values: "MM/dd/yyyy", "MM/dd/yy", "M/d/yyyy", "yy-MM-dd", "yyyy/MM/dd", "yy/MM/dd", "yyyy/M/d", "yy/M/d", "dd/MM/yyyy", "dd/MM/yy", "MMM d, yyyy", "EEE, MMM d", "EEE, MMM d, yyyy", "EEE" — The date display format. Examples are as follows: 2025-10-21 12:00 2025/10/21 12:00 2025/10/21 00:00 25-10-21 00:30 10/21/2025 00:30 10/21/25 00:30 08/10/2025 01:00 08/10/25 01:00

          • is_24_hour_format (required)

            boolean — If `true`, display in 24-hour format. If `false`, display in 12-hour format.

        • number_option

          object — The `number` column option.

          • decimal (required)

            integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

          • show_separator (required)

            boolean — If `true`, display thousand separators. If `false`, do not display thousand separators.

        • people_option

          object — The `people` column option.

          • is_multiple (required)

            boolean — If `true`, allow selection of multiple people. If `false`, only one person can be selected.

          • is_notify (required)

            boolean — If `true`, send a notification message after selecting someone. If `false`, do not send a notification message after selecting someone.

        • percent_option

          object — The `percent` column option.

          • decimal (required)

            integer, possible values: 0, 1, 2, 3, 4, 5 — The number of decimal places.

          • show_progress_bar (required)

            boolean — If `true`, display the progress bar. If `false`, do not display the progress bar.

        • reaction_option

          object — The `reaction` column option.

          • allow_commenter_react (required)

            boolean — Whether a user with only commenter permission is allowed to click. If `true`, the user is allowed to click. If `false`, the user is not allowed to click.

          • display_type (required)

            string, possible values: "number", "people", "none" — The reaction icon display type.

          • icon (required)

            object — The icon content.

            • type (required)

              string, possible values: "emoji" — The icon display type. Currently only supports emoji.

            • value (required)

              string, possible values: "👍", "👎", "🌟" — The icon value.

        • select_option

          object — The `single_select` and `multiple_select` column option.

          • options

            array — The option list.

            Items:

            • name

              string — The option name.

        • url_option

          object — The `url` column option.

          • display_type (required)

            string, possible values: "title", "full", "icon" — The URL display type.

          • open_type (required)

            string, possible values: "current_page", "new_page" — The URL open type.

      • description

        string — Column Description

  • 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",
  "data_table": {
    "columns": [
      {
        "name": "Text",
        "column_type": "text",
        "description": "Text Content",
        "column_options": {
          "date_option": {
            "format": "MM/dd/yyyy",
            "is_24_hour_format": false
          },
          "number_option": {
            "decimal": 1,
            "show_separator": false
          },
          "select_option": {
            "options": [
              {
                "name": "Blue"
              }
            ]
          },
          "percent_option": {
            "decimal": 1,
            "show_progress_bar": false
          },
          "people_option": {
            "is_multiple": false,
            "is_notify": false
          },
          "reaction_option": {
            "icon": {
              "type": "emoji",
              "value": "👍"
            },
            "display_type": "number",
            "allow_commenter_react": false
          },
          "currency_option": {
            "decimal": 1,
            "symbol": "$",
            "format": "accounting"
          },
          "attachment_option": {
            "layout": "thumbnail"
          },
          "url_option": {
            "display_type": "title",
            "open_type": "current_page"
          }
        }
      }
    ]
  }
}

Responses

Status: 201 Returns the ID of the created file.
Content-Type: application/json
  • file_id

    string — The ID of a file in Docs.

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

Search files

  • Method: POST
  • Path: /docs/file_search
  • Tags: Search

Search for files accessible to the current user by query and filters (file_types, ancestor_ids, created_by, owner_id). Pagination uses an opaque next_page_token cursor. The first page should omit next_page_token; subsequent pages must pass it back unchanged along with the same filter parameters as the initial request. Changing any filter while providing next_page_token is invalid and will result in a 400 Bad Request.

Scopes: canvas_file_search:write

Granular Scopes: canvas:write:file_search

Rate Limit Label: LIGHT

Not supported in Gov cluster

Request Body

Content-Type: application/json
  • ancestor_ids

    array — Ancestor folder or shared folder IDs that limit the search scope. If omitted, the API searches all locations accessible to the current user.

    Items:

    string — The ID of an ancestor folder or shared folder.

  • created_by

    string — The unique ID of the user who created the file. When set, only files created by this user are returned.

  • created_time_from

    string, format: date-time — Filter results created on or after this time. Cannot be used together with `modified_time_from` or `modified_time_to`.

  • created_time_to

    string, format: date-time — Filter results created on or before this time. Cannot be used together with `modified_time_from` or `modified_time_to`.

  • file_types

    array — File type filters. If omitted, the search covers all supported file types. Supported values: `doc`, `data_table`, `meeting_agenda`, `meeting_summary`, `note`, `paper_doc`, `spreadsheet`, `presentation`.

    Items:

    string, possible values: "paper_doc", "presentation", "spreadsheet", "doc", "data_table", "note", "meeting_summary", "meeting_agenda" — File types to filter by. Allowed values: `doc`, `data_table`, `meeting_agenda`, `meeting_summary`, `note`, `paper_doc`, `spreadsheet`, `presentation`.

  • modified_time_from

    string, format: date-time — Filter results modified on or after this time. Cannot be used together with `created_time_from` or `created_time_to`.

  • modified_time_to

    string, format: date-time — Filter results modified on or before this time. Cannot be used together with `created_time_from` or `created_time_to`.

  • next_page_token

    string — The next page token is used to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size.

  • owner_id

    string — The unique ID of the user who owns the file. When set, only files owned by this user are returned.

  • page_size

    integer — The number of files to return per page. Range: 1 to 50. If omitted, the server default is used.

  • query

    string — Optional. The search keyword. The API matches this keyword against file titles and searchable content.

Example:

{
  "query": "quarterly review",
  "created_by": "WpIVEe2v321Tb90PpjE5ag",
  "ancestor_ids": [
    "lq59G-liS6Cq213SX5FNtA"
  ],
  "file_types": [
    "doc"
  ],
  "owner_id": "WpIVEe2v321Tb90PpjE5ag",
  "page_size": 20,
  "next_page_token": "eyJ0aW1lQ3Vyc29yIjoiMjAyNS0wNC0yMVQwOTo0NTo1OC45NTJaIiwiaWRDdXJzb3IiOiJzemFsMkpmTlFteTExY1JwdkYxRWhBIn0=",
  "created_time_from": "2026-02-13T00:00:00Z",
  "created_time_to": "2026-02-20T23:59:59Z",
  "modified_time_from": "2026-02-13T00:00:00Z",
  "modified_time_to": "2026-02-20T23:59:59Z"
}

Responses

Status: 200 Returns matching files and a pagination token when more results are available.
Content-Type: application/json
  • files (required)

    array — Files that match the search query and filters. An empty array means no matching files were found.

    Items:

    • file_id (required)

      string — The file's unique ID.

    • file_link (required)

      string, format: uri — The direct URL to open the file.

    • file_name (required)

      string — The display name of the file.

    • file_type (required)

      string, possible values: "paper_doc", "presentation", "spreadsheet", "doc", "data_table", "note", "meeting_summary", "meeting_agenda" — The file's normalized type. Allowed values: `doc`, `data_table`, `meeting_agenda`, `meeting_summary`, `note`, `paper_doc`, `spreadsheet`, `presentation`.

  • next_page_token

    string — The next page token is used to paginate through large result sets. A next page token is returned whenever the set of available results exceeds the current page size.

Example:

{
  "files": [
    {
      "file_id": "lq59G-liS6Cq213SX5FNtA",
      "file_name": "Q2 Product Review",
      "file_link": "https://docs.zoom.us/doc/eXSiwenmABCBaoH7RcA3B1",
      "file_type": "doc"
    }
  ],
  "next_page_token": "eyJ0aW1lQ3Vyc29yIjoiMjAyNS0wNC0yMVQwOTo0NTo1OC45NTJaIiwiaWRDdXJzb3IiOiJzemFsMkpmTlFteTExY1JwdkYxRWhBIn0="
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Possible causes: `query` is invalid or malformed; `file_types` is empty or contains unsupported types; `page_size` is out of range; `next_page_token` is invalid or expired; time range is invalid (e.g. `_from` is after `_to`); `created_time_*` and `modified_time_*` filters cannot be used simultaneously.
Status: 403 **HTTP Status Code:** `403` <br> Forbidden You do not have permission to search files.
Status: 404 **HTTP Status Code:** `404` <br> Not Found The specified ancestor folder or shared folder was not found or is unavailable.
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).