Clips

  • OpenAPI Version: 3.1.1
  • API Version: 2

Clips APIs allow developers to interface with Zoom Clips features programmatically. Zoom Clips enables users to capture, manage, and share short video recordings, making it a valuable tool for collaboration, communication, and documentation.

Servers

  • URL: https://api.zoom.us/

Operations

List all clips

  • Method: GET
  • Path: /clips
  • Tags: Clips

Returns a list of clips of the current user or a list of all clips under the account.

Required scopes clips:read:list_user_clips:admin)

Note user_id can intake Zoom user ID or email, which only applies when scope = clips:read:list_user_clips:admin or scope=clips:read:list_user_clips:master. Otherwise, the user_id can only intake me.

Scopes: clips:read,clips:read:admin

Granular Scopes: clips:read:list_user_clips,clips:read:list_user_clips:admin

Rate Limit Label: LIGHT

Responses

Status: 200 Clips list returned.
Content-Type: application/json
  • data

    array — The list of clips.

    Items:

    • clip_id

      string — The clip's ID.

    • created_date

      string — The clip created date-time in UTC/GMT. Example: "2020-03-31T12:02:00Z"

    • description

      string — The description of the clip.

    • duration

      number — The duration of the clip, where the unit of duration is seconds.

    • file_size

      integer — The clip file size in bytes

    • modified_date

      string — The clip modified date-time in UTC/GMT. Example: "2020-03-31T12:02:00Z"

    • owner_id

      string — The owner's ID.

    • share_link

      string — The share link of the clip.

    • share_link_settings

      object — The access level, which indicates the access type of the current clips' share link.

      • enable_passcode

        boolean — Whether the passcode is enabled.

      • passcode

        string — The passcode. It exists only when `enable_passcode=true`

      • share_scope

        string, possible values: "ANYONE", "SAME_ORGANIZATON", "INVITED_MEMBERS_ONLY", "PRIVATE" — ANYONE - Anyone with this clip link can watch it. SAME_ORGANIZATON - Only users who are in the same organization as the clip owner can watch it. INVITED_MEMBERS_ONLY - Only invited users can watch it. PRIVATE - Only the clip's owner and account administrators can watch it.

    • status

      string, possible values: "RECORD_START", "RECORD_FAILED", "RECORD_END", "RECORD_SUCCESS", "RECORD_DELETE", "SUSPENDED" — The clip status. RECORD_START - It means the clip recording has started but has not yet ended. RECORD_FAILED - It means the clip recording failed. RECORD_END - It means the clip recording has ended but the MP4 transcription is not yet complete. RECORD_SUCCESS - It means the clip recording has reached its final state and is fully complete. RECORD_DELETE - It means the clip has been soft deleted. SUSPENDED - It means the clip has been suspended by the trust & safety team.

    • tags

      array — The clip's tags

      Items:

      string — tag name

    • thumbnail_link

      string — The clip thumbnail link.

    • title

      string — The title of the clip.

  • next_page_token

    string — The next page token paginates through large result sets. A next page token returns whenever the set of available results exceeds the current page size. This token's expiration period is 15 minutes.

  • page_size

    integer, default: 30 — The number of records returned within a single API call.

  • total_records

    number — The total number of records found.

Example:

{
  "data": [
    {
      "title": "clips test title",
      "description": "just for test",
      "duration": 6000,
      "status": "RECORD_SUCCESS",
      "clip_id": "A2RldhYyU08zeDNIeFJJVzBOcHFRVlZQWXlRAQ",
      "owner_id": "pRof_6gpQP2YKDxmglRziA",
      "file_size": 639229,
      "share_link": "https://dev-integration.zoomdev.us/clips/share/A2RldhYyU08zeDNIeFJJVzBOcHFRVlZQWXlRAQ",
      "share_link_settings": {
        "passcode": "Dmpy*xy7",
        "share_scope": "ANYONE",
        "enable_passcode": true
      },
      "thumbnail_link": "https://file.zoomdev.us/file/2SO3x3HxRIW0NpqQVVPYyQ?attachType=preview&filename=2SO3x3HxRIW0NpqQVVPYyQ.jpg&jwt=eyJhbGciOiJFUzI1NiIsImsiOiJLSzQxYXo3LyJ9.eyJpc3MiOiJmaWxlIiwiYXVkIjoiemZzIiwiaWljIjoiZGV2IiwiaWF0IjoxNzMwNDM4OTE2LCJvcmkiOiJtYXJ2ZWwiLCJkaWciOiI5NDhhMjIxYjU2ZTFhOWM1YTMyOTE0ODdlNjFmMGU1YjA2NzkzNTM3NTY5NDRhZWVjNzcyYmU3OTQ3ZWQ3ZTAwIiwiZXhwIjoxNzMwNDQ2MTE2LCJoZGlnIjpmYWxzZX0.Lgk1SRRKsxrxWN6F9Y9aZgfqXCSZ1mJg-UsunpVCMuRMYUR1Sf-gGn1_2_Fc1gFexkBKr0C50jT7Vo1_1YQUlQ&subType=552x310",
      "created_date": "2024-10-11T01:51:50.631+00:00",
      "modified_date": "2024-10-31T10:06:08.460+00:00",
      "tags": [
        "testTag"
      ]
    }
  ],
  "next_page_token": "R4aF9Oj0fVM2hhezJTEmSKaBSkfesDwGy42",
  "page_size": 30,
  "total_records": 30
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Pagination Error <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> No authenticated <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1003` <br> No permission to operate <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).

Get collaborators of a clip

  • Method: GET
  • Path: /clips/{clipId}/collaborators
  • Tags: Clips

Returns the list of collaborators for a clip that the current user owns or returns the list of collaborators for any clip associated with the account. Required scopes clips:read:list_collaborator:admin

Scopes: clips:read,clips:read:admin

Granular Scopes: clips:read:list_collaborator,clips:read:list_collaborator:admin

Rate Limit Label: LIGHT

Responses

Status: 200 **HTTP Status Code:** `200` Clips returned.
Content-Type: application/json
  • data

    array — A list of the clip's collaborators.

    Items:

    • avatar

      string — The avatar's URL

    • channel_id

      string — This field returns *nullable Team chat channel ID*. This response only returns if the type is 'CHANNEL'. If the `collaborator_type` is not 'CHANNEL', it returns a null value.

    • display_name

      string — This field returns *nullable Display Name*. This response returns a value only when the type is either 'ZOOM_USER' or 'CHANNEL' and the user belongs to the same organization; otherwise, it returns a null value.

    • email

      string — This field returns *nullable Email*. This response only returns if the type is 'EXTERNAL_USER'. If the type is not 'EXTERNAL_USER', it returns a null value.

    • role

      string, possible values: "OWNER", "VIEWER" — The owner (OWNER) of the clip. VIEWER - A viewer of the clip.

    • type

      string, possible values: "ZOOM_USER", "EXTERNAL_USER", "CHANNEL" — A Zoom user (ZOOM_USER). EXTERNAL_USER - A non-Zoom user. CHANNEL - A channel, not a user.

    • user_id

      string — This field returns *nullable User ID*. This response returns a value only if the type is 'ZOOM_USER' and the user belongs to the same organization. If the type is not 'ZOOM_USER' or the user does not belong to the same organization, it returns a null value.

  • next_page_token

    string — The next page token paginates through a large set of results. A next page token returns when the available results exceed the current page size. The expiration period for this token is 15 minutes.

  • page_size

    number — The number of records returned per page in a single API call.

Example:

{
  "data": [
    {
      "avatar": "https://filedev.zoomdev.us/p/pRof_6gpQP2YKDxmglRziA/664dcb20-5d05-40da-8fd0-ef32b6f2ee5b-3518",
      "email": "dev_victor_test_main@dispostable.com",
      "type": "ZOOM_USER",
      "role": "VIEWER",
      "display_name": "dev_victor dev_lu",
      "channel_id": "c15e84143a6949568247c2fe1e097bd2",
      "user_id": "4BJ2vryWQg-VZaj0iP4p0w"
    }
  ],
  "next_page_token": "INg1ogDUtBxsvlBiDnZQ8Ik0qpK4XaCjg22",
  "page_size": 30
}
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> No authenticated <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1003` <br> No permission to operate <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2000` <br> Clip does not exist: {clipId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).

Remove the collaborator from a clip

  • Method: DELETE
  • Path: /clips/{clipId}/collaborators
  • Tags: Collaborator

Removes a collaborator from a clip.

Scopes: clips:write,clips:write:admin

Granular Scopes: clips:delete:collaborators,clips:delete:collaborators:admin

Rate Limit Label: LIGHT

Responses

Status: 204 Clip collaborator deleted successfully.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1500` <br> Input parameter is invalid. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> No authenticated. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1003` <br> No permission to operate <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2000` <br> Clip does not exist: {clipId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).

List clip comments

  • Method: GET
  • Path: /clips/{clipId}/comments
  • Tags: Comment

Returns the list of comments for a clip.

Scopes: clips:read,clips:read:admin

Granular Scopes: clips:read:list_comments,clips:read:list_comments:admin

Rate Limit Label: LIGHT

Responses

Status: 200 Clip comment list returned.
Content-Type: application/json
  • data

    array — The list of comments.

    Items:

    • avatar

      string — The comment owner's avatar.

    • children_comments

      array — The list of comments.

      Items:

      • avatar

        string — The comment owner's avatar.

      • comment_id

        string — The comment's ID.

      • content

        string — The comment's content.

      • content_type

        string, possible values: "TEXT_WITH_MENTION", "TEXT" — The type of the comment. TEXT_WITH_MENTION – A comment that includes a mention. TEXT – A comment without any mention.

      • created_date

        string — The comment created date-time in UTC/GMT. Example: "2020-03-31T12:02:00Z"

      • display_name

        string — The comment owner's name.

      • edited

        boolean — Indicates whether the comment has been modified.

      • mentions

        array — Includes mention information in the comment, if present.

        Items:

        • display_name

          string — The display name of the mentioned user.

        • email

          string — The email address of the mentioned user.

      • modified_date

        string — The comment modified date-time in UTC/GMT. Example: "2020-03-31T12:02:00Z"

      • parent_node_id

        string — The comment parent node's ID.

    • comment_id

      string — The comment's ID.

    • content

      string — The comment's content. Supports user mentions in the format: @\[display_name](user:email). Example: @\[clips clips](user:victor.lu@dev.gg) @\[victor.lu](user:devint_test_clips@dispostable.com) here it is - display_name is the visible name shown in the comment. - email is a unique identifier used to resolve the mentioned user. Developers can extract mention info using the regex: @\[(.*?)\]\(user:(.*?)\)

    • content_type

      string, possible values: "TEXT_WITH_MENTION", "TEXT" — The type of the comment. TEXT_WITH_MENTION – A comment that includes a mention. TEXT – A comment without any mention. EMOJI – An emoji reaction without text.

    • created_date

      string — The comment created date-time in UTC/GMT. Example: "2020-03-31T12:02:00Z"

    • display_name

      string — The comment owner's display name. If the owner is a Zoom user, it will display the user's name. If the owner is a guest, it will always display 'Guest'. If the owner is an invited email user (not a Zoom user), it will display the user's email address.

    • edited

      boolean — Whether the comment has been modified.

    • mentions

      array — The mention information in the comment, if present.

      Items:

      • display_name

        string — The display name of the mentioned user.

      • email

        string — The email address of the mentioned user.

    • modified_date

      string — The comment modified date-time in UTC/GMT. Example: "2020-03-31T12:02:00Z"

    • parent_node_id

      string — The comment parent node's ID.

  • next_page_token

    string — The next page token paginates through a large set of results. A next page token returns when the available results exceed the current page size. The expiration period for this token is 15 minutes.

  • page_size

    number — The number of records returned per page in a single API call.

Example:

{
  "data": [
    {
      "comment_id": "a16eb597-90ed-4e70-8475-4f1e0022c8a7",
      "content": "@[clips clips](user:victor.lu@dev.gg) @[victor.lu](user:devint_test_clips@dispostable.com) here it is",
      "created_date": "2023-11-16T02:50:51Z",
      "modified_date": "2023-11-16T02:50:51Z",
      "display_name": "dev_victor dev_lu",
      "avatar": "https://filedev.zoomdev.us/p/pRof_6gpQP2YKDxmglRziA/664dcb20-5d05-40da-8fd0-ef32b6f2ee5b-3518",
      "parent_node_id": "0b7cdb63-0be1-4a05-b44d-e611ac9ae86c",
      "edited": false,
      "mentions": [
        {
          "display_name": "clips clips",
          "email": "devint_test_clips@dispostable.com"
        }
      ],
      "content_type": "TEXT_WITH_MENTION",
      "children_comments": [
        {
          "comment_id": "a16eb597-90ed-4e70-8475-4f1e0022c8a7",
          "content": "test comment",
          "created_date": "2023-11-16T02:50:51Z",
          "modified_date": "2023-11-16T02:50:51Z",
          "display_name": "dev_victor dev_lu",
          "avatar": "https://filedev.zoomdev.us/p/pRof_6gpQP2YKDxmglRziA/664dcb20-5d05-40da-8fd0-ef32b6f2ee5b-3518",
          "parent_node_id": "0b7cdb63-0be1-4a05-b44d-e611ac9ae86c",
          "edited": false,
          "mentions": [
            {
              "display_name": "Lowell",
              "email": "dev_clips_lowell@dispostable.com"
            }
          ],
          "content_type": "TEXT_WITH_MENTION"
        }
      ]
    }
  ],
  "next_page_token": "d0csbC3glWlDxlBYP2YcyXox01QHyiwhPg2",
  "page_size": 15
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Pagination Error <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> No authenticated <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1003` <br> No permission to operate <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2000` <br> Clip does not exist: {clipId}. <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 comment

  • Method: DELETE
  • Path: /clips/{clipId}/comments/{commentId}
  • Tags: Comment

Removes a comment from a clip.

Scopes: clips:write,clips:write:admin

Granular Scopes: clips:delete:comment,clips:delete:comment:admin

Rate Limit Label: LIGHT

Responses

Status: 204 Clip comment deleted successfully.
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> No authenticated <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1003` <br> No permission to operate <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2000` <br> Clip does not exist: {clipId}. <br> **Error Code:** `2005` <br> Comment does not exist: {commentId}. <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/).

Download a clip

  • Method: GET
  • Path: /clips/{clipId}/download
  • Tags: Download

Retrieves the download URL for a specific clip and redirects the client to that URL. This endpoint performs a HTTP 302 redirect to the actual download location, allowing the client to download the clip mp4 file directly.

Scopes: clips:read,clips:read:admin

Granular Scopes: clips:read:download_clip,clips:read:download_clip:admin

Rate Limit Label: LIGHT

Responses

Status: 200 The clip file binary stream.
Content-Type: application/octet-stream
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `50002` <br> clip mp4 is not ready <br> **Error Code:** `50003` <br> download url is invalid <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `20001` <br> permission validate failed <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `10002` <br> clip not found or not ready <br>

Get a clip

  • Method: GET
  • Path: /clips/{clipId}
  • Tags: Single

Returns a clip from the current user, or returns any clips associated with the account.

Required scopes: clips:read:clip:admin.

Scopes: clips:read,clips:read:admin

Granular Scopes: clips:read:clip,clips:read:clip:admin

Responses

Status: 200 Clip object returned.
Content-Type: application/json
  • clip_id

    string — The clip's ID.

  • created_date

    string — The clip created date-time in UTC/GMT. Example: "2020-03-31T12:02:00Z"

  • description

    string — The clip's description.

  • duration

    number — The duration of the clip, where the unit of duration is in seconds.

  • file_size

    integer — The clip's file size in bytes.

  • modified_date

    string — The clip modified date-time in UTC/GMT. Example: "2020-03-31T12:02:00Z"

  • owner_id

    string — The owner's ID.

  • share_link

    string — The clip's share link.

  • share_link_settings

    object — The access level, which indicates the access type of the current clips' share link.

    • enable_passcode

      boolean — Whether the passcode is enabled.

    • passcode

      string — The passcode. Ir exists only when `enable_passcode=true`

    • share_scope

      string, possible values: "ANYONE", "SAME_ORGANIZATON", "INVITED_MEMBERS_ONLY", "PRIVATE" — ANYONE - Anyone with this clip link can watch it. SAME_ORGANIZATON - Only users who are in the same organization as the clip owner can watch it. INVITED_MEMBERS_ONLY - Only invited users can watch it. PRIVATE - Only the clip's owner and account administrators can watch it.

  • status

    string, possible values: "RECORD_START", "RECORD_FAILED", "RECORD_END", "RECORD_SUCCESS", "RECORD_DELETE", "SUSPENDED" — The clip's status. RECORD_START - The clip recording has started but has not yet ended. RECORD_FAILED - The clip recording failed. RECORD_END - The clip recording has ended but the MP4 transcription is not yet complete. RECORD_SUCCESS - The clip recording has reached its final state and is fully complete. RECORD_DELETE - The clip has been soft deleted. SUSPENDED - The clip has been suspended by the trust & safety team.

  • tags

    array — the clip's tags.

    Items:

    string — The tag name.

  • thumbnail_link

    string — The clip thumbnail link.

  • title

    string — The clip's title.

Example:

{
  "title": "clips test title",
  "description": "just for test",
  "duration": 6000,
  "status": "RECORD_SUCCESS",
  "clip_id": "A2RldhYyU08zeDNIeFJJVzBOcHFRVlZQWXlRAQ",
  "owner_id": "pRof_6gpQP2YKDxmglRziA",
  "file_size": 639229,
  "share_link": "https://dev-integration.zoomdev.us/clips/share/A2RldhYyU08zeDNIeFJJVzBOcHFRVlZQWXlRAQ",
  "share_link_settings": {
    "passcode": "Dmpy*xy7",
    "share_scope": "ANYONE",
    "enable_passcode": true
  },
  "thumbnail_link": "https://file.zoomdev.us/file/2SO3x3HxRIW0NpqQVVPYyQ?attachType=preview&filename=2SO3x3HxRIW0NpqQVVPYyQ.jpg&jwt=eyJhbGciOiJFUzI1NiIsImsiOiJLSzQxYXo3LyJ9.eyJpc3MiOiJmaWxlIiwiYXVkIjoiemZzIiwiaWljIjoiZGV2IiwiaWF0IjoxNzMwNDM4OTE2LCJvcmkiOiJtYXJ2ZWwiLCJkaWciOiI5NDhhMjIxYjU2ZTFhOWM1YTMyOTE0ODdlNjFmMGU1YjA2NzkzNTM3NTY5NDRhZWVjNzcyYmU3OTQ3ZWQ3ZTAwIiwiZXhwIjoxNzMwNDQ2MTE2LCJoZGlnIjpmYWxzZX0.Lgk1SRRKsxrxWN6F9Y9aZgfqXCSZ1mJg-UsunpVCMuRMYUR1Sf-gGn1_2_Fc1gFexkBKr0C50jT7Vo1_1YQUlQ&subType=552x310",
  "created_date": "2024-10-11T01:51:50.631+00:00",
  "modified_date": "2024-10-31T10:06:08.460+00:00",
  "tags": [
    "tagTest"
  ]
}
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> No authenticated <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1003` <br> No permission to operate <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2000` <br> Clip does not exist: {clipId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).

Delete a clip(soft delete)

  • Method: DELETE
  • Path: /clips/{clipId}
  • Tags: Single

Deletes a clip.

Scopes: clips:write,clips:write:admin

Granular Scopes: clips:delete:clip,clips:delete:clip:admin

Rate Limit Label: LIGHT

Responses

Status: 204 Clip deleted successfully.
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> No authenticated <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1003` <br> No permission to operate <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2000` <br> Clip does not exist: {clipId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).

Update a clip's basic info

  • Method: PATCH
  • Path: /clips/{clipId}
  • Tags: Single

Updates clips basic info by clip's Id, now support update title/description/tags

Required scopes: clips:write:clip:admin.

Scopes: clips:write,clips:write:admin

Granular Scopes: clips:update:clip,clips:update:clip:admin

Rate Limit Label: LIGHT

Request Body

Content-Type: application/json
  • description

    string — The clip summary.

  • tags

    array — The clip tags. The support max size is 10

    Items:

    string — The tag name.

  • title

    string — The clip title.

Example:

{
  "title": "test-open-api",
  "description": "test-open-api-desc",
  "tags": [
    "testTag"
  ]
}

Responses

Status: 204 Clip updated successfully.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Field 'tags' size exceeds max size 10
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1003` <br> No permission to operate <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `2000` <br> Clip does not exist: {clipId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).

Transfer clips owner

  • Method: POST
  • Path: /clips/transfers
  • Tags: Transfer

Transfers clip ownership to another user.

Scopes: clips:write:admin

Granular Scopes: clips:write:transfer_owner:admin

Rate Limit Label: MEDIUM

Request Body

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

    string — The source user ID who currently owns the clips. Optional for full transfers.

  • target_owner_user_id (required)

    string — The target user ID to receive ownership. Must be active.

  • transfer_type (required)

    string, possible values: "PARTIAL_TRANSFER", "FULL_TRANSFER" — The type of transfer event: PARTIAL_TRANSFER or FULL_TRANSFER.

  • clip_id_list

    array — The list of specific clip IDs to transfer. Required for partial transfers.

    Items:

    string — The clip ID.

Example:

{
  "source_owner_user_id": "user_123",
  "clip_id_list": [
    "clip_id_123"
  ],
  "target_owner_user_id": "user_234",
  "transfer_type": "PARTIAL_TRANSFER"
}

Responses

Status: 201 **HTTP Status Code:** `201` Clips transfer status.
Content-Type: application/json
  • task_id (required)

    string — The unique ID of this transfer request for logging/correlation.

Example:

{
  "task_id": "task_id_123"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1007` <br> Clips not belong current user. <br> **Error Code:** `10001` <br> Missing field. <br> **Error Code:** `10003` <br> Invalidated field value. <br> **Error Code:** `10004` <br> When transfer type is PARTIAL_TRANSFER, clip_id_list limit size is 50. <br> **Error Code:** `20002` <br> Clips not belong sourceOwner. <br> **Error Code:** `30001` <br> Source user and target user have processing transfer task. <br> **Error Code:** `10002` <br> Can not found any clip by clip_id_list <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> No authenticated <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1003` <br> No permission to operate <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/).

Transfer task status check

  • Method: GET
  • Path: /clips/transfers/{taskId}
  • Tags: Transfer

Transfers the task status check.

Scopes: clips:read:admin

Granular Scopes: clips:read:transfer_task_status:admin

Rate Limit Label: LIGHT

Responses

Status: 200 The clips transfer task status.
Content-Type: application/json
  • source_owner_user_id (required)

    string — The source user ID who currently owns the clips. Optional for full transfers.

  • status (required)

    string, possible values: "IN_PROCESS", "SUCCESS", "FAILED" — The current status of the transfer task.

  • target_owner_user_id (required)

    string — The target user ID to receive ownership. Must be an active user.

  • transfer_type (required)

    string, possible values: "PARTIAL_TRANSFER", "FULL_TRANSFER" — The type of transfer operation: PARTIAL_TRANSFER or FULL_TRANSFER.

  • clip_id_list

    array — The list of specific clip IDs to transfer. Required for partial transfers.

    Items:

    string — The clip ID.

Example:

{
  "status": "FAILED",
  "transfer_type": "PARTIAL_TRANSFER",
  "source_owner_user_id": "user_123",
  "target_owner_user_id": "user_234",
  "clip_id_list": [
    "clip_id_123"
  ]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `10001` <br> Missing field. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1002` <br> No authenticated. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1003` <br> No permission to operate <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `10002` <br> Can not found any async task by taskId and accountId. <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/).

Upload clip file

  • Method: POST
  • Path: /clips/files
  • Tags: Upload

Uploads a file to Zoom Revenue Acclerator.

Note:

  • Base URL: https://fileapi.zoom.us/v2/.
  • The rate limit is 20 requests per second or 2000 requests per second per IP address or 50 requests per user within a 24-hour period
  • The caller must support HTTP 30x redirects.
  • The caller must retain the Authorization header when redirected to a different hostname.
  • Supported video formats: .mp4, .webm.
  • When your object size reaches 2 GB, you should use multipart uploads instead of uploading the object in a single operation.
  • 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 Zoom Clips.

Scopes: clips:write,clips:write:admin

Request Body

Content-Type: multipart/form-data
  • file (required)

    string — The upload file, in binary format. You can only send a maximum of two gigabytes.

Example:

{
  "file": "Vm1wSmQyVkhUWGxVV0docVVteHdjRlZxVGs1UFVUMDk="
}

Responses

Status: 201 **HTTP Status Code:** `201` File successfully uploaded.
Content-Type: application/json
  • clip_id

    string — The clip's unique ID.

Example:

{
  "clip_id": "xBvggqyjQUal6TecwMlYwE"
}
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).

Upload clip multipart files

  • Method: POST
  • Path: /clips/files/multipart
  • Tags: Upload

Uploads a multipart file.

Note:

  • The base URL for this API is https://fileapi.zoom.us/v2/.
  • The rate limit of this API is 20 requests per second or 2000 requests per second per IP address or 50 requests per user within a 24-hour period.
  • The caller must support HTTP 30x redirects.
  • The caller must retain the authorization header when redirected to a different hostname.
  • Video can be in .mp4, .webm format.
  • In general, when your object size reaches 2 GB, you should use multipart uploads instead of uploading the object in a single operation.
  • For an account-level OAuth app, this API can only be used on behalf of a user who is assigned with a role that has the Edit permission for Zoom Clips.

Scopes: clips:write,clips:write:admin

Request Body

Content-Type: multipart/form-data
  • file (required)

    string — The upload file, in binary format. Each part must be at most 100 MB in size, and at least 5 MB in size, except the last part.

  • part_number (required)

    integer — When uploading multipart files, this field indicates the part number of the part being uploaded . This field is a positive integer between 1 and 100.

  • upload_context (required)

    string — When uploading multipart files, use the upload context to identify the multipart upload whose part is being uploaded.

Example:

{
  "file": "VmpKMGExSXlWbk5qUldoVFltNUNhRlZxUWxaUFVUMDk=",
  "upload_context": "noNpr2pkBEv4_fTxYWDEHBsSs3pl8keRx4fPZmnyNDe.SPdodJp.3UZDaCI2xRVzkRh0xeEV6RuOrXZpJQBPutWCS424c2YnHVxVh8b9.4DNwd4VErRuD98jeJBwRCgz6rC3I4NQg5zXAtCqPFoC0g--",
  "part_number": 10
}

Responses

Status: 201 **HTTP Status Code:** `201` File successfully uploaded.
Content-Type: application/json
  • part_number_etag

    object — The etag part number . Collect and bring it back in the final request to complete the multipart upload request.

    • etag

      string — The etag of the part being uploaded.

    • part_number

      integer — The part number of the part being uploaded.

Example:

{
  "part_number_etag": {
    "part_number": 1,
    "etag": "etag1"
  }
}
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).

Initiate and complete the multipart file upload for a clip

  • Method: POST
  • Path: /clips/files/multipart/upload_events
  • Tags: Upload

Initiates or completes a multipart upload.

Note:

  • The base URL for this API is https://fileapi.zoom.us/v2/.
  • The rate limit is 20 requests per second or 2000 requests per second per IP address or 50 requests per user within a 24-hour period
  • The caller must support HTTP 30x redirects.
  • The caller must retain the authorization header when redirected to a different hostname.
  • Once initiated, the multipart upload must complete within 7 days.
  • For account-level OAuth apps, this API can only be used on behalf of a user who is assigned with a role with Edit permission for Zoom Clips.

Scopes: clips:write:admin,clips:write

Request Body

Content-Type: application/json

One of:

  • method (required)

    string, possible values: "CreateMultipartUpload" — The method to upload events: * `CreateMultipartUpload` — Create a multipart upload.

  • params

    object — The CreateMultipartUpload parameters.

    • file_name

      string — The clip file's name.

  • method (required)

    string, possible values: "CompleteMultipartUpload" — The method to upload events: * `CompleteMultipartUpload` — Complete a multipart upload.

  • params

    object — The parameters for the complete multipart upload.

    • part_number_etags

      array — The part number of the etags being uploaded.

      Items:

      • etag

        string — The etag of the part being uploaded.

      • part_number

        integer — The part number of the part being uploaded.

    • upload_context

      string — The upload context that identifies the multipart upload being uploaded.

Example:

{
  "method": "CreateMultipartUpload",
  "params": {
    "file_name": "file name"
  }
}

Responses

Status: 201 **Status Code:** `201` Successfully initiate and complete a multipart upload.
Content-Type: application/json

One of:

  • upload_context

    string — The upload context. Return this field if you pass the `CreateMultipartUpload` value for the `method` field. **Note:** Use this upload context to associate all of the parts in the specific multipart upload. You specify this upload context in each of your subsequent upload part requests. You also include this upload context in the final request to complete the multipart upload request.

  • clip_id

    string — The clip file's unique ID. Return this field if you pass the `CompleteMultipartUpload` value for the `method` field.

Example:

{
  "upload_context": "noNpr2pkBEv4_fTxYWDEHBsSs3pl8keRx4fPZmnyNDe.SPdodJp.3UZDaCI2xRVzkRh0xeEV6RuOrXZpJQBPutWCS424c2YnHVxVh8b9.4DNwd4VErRuD98jeJBwRCgz6rC3I4NQg5zXAtCqPFoC0g--"
}
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).