# Clips - **OpenAPI Version:** `3.1.1` - **API Version:** `2` Clips APIs allow developers to interface with [Zoom Clips](https://developers.zoom.us/docs/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](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:read`,`clips:read:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:read:list_user_clips`,`clips:read:list_user_clips:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `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:** ```json { "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\` \
Bad Request \*\*Error Code:\*\* \`300\` \
Pagination Error \
##### Status: 401 \*\*HTTP Status Code:\*\* \`401\` \
Unauthorized \*\*Error Code:\*\* \`1002\` \
No authenticated \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`1003\` \
No permission to operate \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
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](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:read`,`clips:read:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:read:list_collaborator`,`clips:read:list_collaborator:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `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:** ```json { "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\` \
Unauthorized \*\*Error Code:\*\* \`1002\` \
No authenticated \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`1003\` \
No permission to operate \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`2000\` \
Clip does not exist: {clipId}. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
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](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:write`,`clips:write:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:delete:collaborators`,`clips:delete:collaborators:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` #### Responses ##### Status: 204 Clip collaborator deleted successfully. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`1500\` \
Input parameter is invalid. \
##### Status: 401 \*\*HTTP Status Code:\*\* \`401\` \
Unauthorized \*\*Error Code:\*\* \`1002\` \
No authenticated. \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`1003\` \
No permission to operate \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`2000\` \
Clip does not exist: {clipId}. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
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](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:read`,`clips:read:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:read:list_comments`,`clips:read:list_comments:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `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:** ```json { "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\` \
Bad Request \*\*Error Code:\*\* \`300\` \
Pagination Error \
##### Status: 401 \*\*HTTP Status Code:\*\* \`401\` \
Unauthorized \*\*Error Code:\*\* \`1002\` \
No authenticated \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`1003\` \
No permission to operate \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`2000\` \
Clip does not exist: {clipId}. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Delete a comment - **Method:** `DELETE` - **Path:** `/clips/{clipId}/comments/{commentId}` - **Tags:** Comment Removes a comment from a clip. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:write`,`clips:write:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:delete:comment`,`clips:delete:comment:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` #### Responses ##### Status: 204 Clip comment deleted successfully. ##### Status: 401 \*\*HTTP Status Code:\*\* \`401\` \
Unauthorized \*\*Error Code:\*\* \`1002\` \
No authenticated \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`1003\` \
No permission to operate \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`2000\` \
Clip does not exist: {clipId}. \
\*\*Error Code:\*\* \`2005\` \
Comment does not exist: {commentId}. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
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](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:read`,`clips:read:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:read:download_clip`,`clips:read:download_clip:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` #### Responses ##### Status: 200 The clip file binary stream. ###### Content-Type: application/octet-stream ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`50002\` \
clip mp4 is not ready \
\*\*Error Code:\*\* \`50003\` \
download url is invalid \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`20001\` \
permission validate failed \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`10002\` \
clip not found or not ready \
### 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](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:read`,`clips:read:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `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:** ```json { "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\` \
Unauthorized \*\*Error Code:\*\* \`1002\` \
No authenticated \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`1003\` \
No permission to operate \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`2000\` \
Clip does not exist: {clipId}. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
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](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:write`,`clips:write:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:delete:clip`,`clips:delete:clip:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` #### Responses ##### Status: 204 Clip deleted successfully. ##### Status: 401 \*\*HTTP Status Code:\*\* \`401\` \
Unauthorized \*\*Error Code:\*\* \`1002\` \
No authenticated \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`1003\` \
No permission to operate \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`2000\` \
Clip does not exist: {clipId}. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
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](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:write`,`clips:write:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:update:clip`,`clips:update:clip:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `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:** ```json { "title": "test-open-api", "description": "test-open-api-desc", "tags": [ "testTag" ] } ``` #### Responses ##### Status: 204 Clip updated successfully. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request Field 'tags' size exceeds max size 10 ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`1003\` \
No permission to operate \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`2000\` \
Clip does not exist: {clipId}. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rest/rate-limits/). ### Get Clip Chapters - **Method:** `GET` - **Path:** `/clips/{clipId}/chapters` - **Tags:** Single Get the complete chapter list and chapter generation status for a clip. If the clip has no chapters, this returns an empty chapters array instead of an error. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:read`,`clips:read:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:read:chapters`,`clips:read:chapters:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` **Not supported in Gov cluster** #### Responses ##### Status: 200 Response of clip chapters. ###### Content-Type: application/json - **`chapters`** `array` — The complete chapter list. POST requests must submit the full list. **Items:** - **`start_time` (required)** `string` — The chapter start time. Format: \`HH:mm:ss.SSS\`. For example, \`00:02:35.000\`. - **`title` (required)** `string` — The chapter title. Must be non-empty. Max length: 100. - **`summary`** `string` — The chapter summary. Max length: 1000. - **`clip_id`** `string` — The unique identifier of the clip. - **`status`** `string`, possible values: `"processing", "success", "failed", "manual", "none"`, default: `"none"` — The chapter status. Allowed values: \`none\`, \`processing\`, \`success\`, \`failed\`, \`manual\`. **Example:** ```json { "clip_id": "abc123", "status": "manual", "chapters": [ { "start_time": "00:00:00.000", "title": "Introduction", "summary": "The clip starts with an overview of the topic." } ] } ``` ##### Status: 401 \*\*HTTP Status Code:\*\* \`401\` \
Unauthorized \*\*Error Code:\*\* \`1002\` \
Unauthenticated. \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`20001\` \
Permission validation failed. \
\*\*Error Code:\*\* \`20002\` \
Chapter feature is disabled. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`10002\` \
Clip not found. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Create Clip Chapters - **Method:** `POST` - **Path:** `/clips/{clipId}/chapters` - **Tags:** Single Create or replace all chapters for a clip. The request body must include the complete chapter list. Existing chapters will be replaced by the submitted list. This API does not support appending chapters. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:read`,`clips:read:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:write:chapters`,`clips:write:chapters:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` **Not supported in Gov cluster** #### Request Body ##### Content-Type: application/json - **`chapters`** `array` — Complete chapter list to create or replace. Must contain 2-50 chapters. The first chapter must have \`start\_time\` set to \`00:00:00.000\`. **Items:** - **`start_time` (required)** `string` — The chapter start time in \`HH:mm:ss.SSS\` format. For example, \`00:02:35.000\`. - **`title` (required)** `string` — The chapter title. Must be non-empty. Max length: 100. - **`summary`** `string` — The chapter summary. Max length: 1000. **Example:** ```json { "chapters": [ { "start_time": "00:00:00.000", "title": "Introduction", "summary": "The clip starts with an overview of the topic." } ] } ``` #### Responses ##### Status: 201 Successfully created or replaced the chapters. ###### Content-Type: application/json - **`chapters`** `array` — The complete chapter list. **Items:** - **`start_time` (required)** `string` — The chapter start time in \`HH:mm:ss.SSS\` format. For example, \`00:02:35.000\`. - **`title` (required)** `string` — The chapter title. Must be non-empty. Max length: 100. - **`summary`** `string` — The chapter summary. Max length: 1000. - **`clip_id`** `string` — The unique identifier of the clip. - **`status`** `string`, possible values: `"processing", "success", "failed", "manual", "none"`, default: `"none"` — The chapter status. Allowed values: \`none\`, \`processing\`, \`success\`, \`failed\`, \`manual\`. **Example:** ```json { "clip_id": "abc123", "status": "manual", "chapters": [ { "start_time": "00:00:00.000", "title": "Introduction", "summary": "The clip starts with an overview of the topic." } ] } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`10001\` \
Missing required field: chapters. \
\*\*Error Code:\*\* \`10001\` \
Missing required field: title. \
\*\*Error Code:\*\* \`10003\` \
Invalid field value: start\_time. \
\*\*Error Code:\*\* \`10003\` \
Invalid field value: chapters. \
\*\*Error Code:\*\* \`10004\` \
Chapters list size exceeds the limit. \
##### Status: 401 \*\*HTTP Status Code:\*\* \`401\` \
Unauthorized \*\*Error Code:\*\* \`1002\` \
Unauthenticated. \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`20001\` \
Permission validation failed. \
\*\*Error Code:\*\* \`20002\` \
The chapter feature is disabled. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`10002\` \
Clip not found. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Transfer clips owner - **Method:** `POST` - **Path:** `/clips/transfers` - **Tags:** Transfer Transfers clip ownership to another user. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:write:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:write:transfer_owner:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `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:** ```json { "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:** ```json { "task_id": "task_id_123" } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`1007\` \
Clips not belong current user. \
\*\*Error Code:\*\* \`10001\` \
Missing field. \
\*\*Error Code:\*\* \`10003\` \
Invalidated field value. \
\*\*Error Code:\*\* \`10004\` \
When transfer type is PARTIAL\_TRANSFER, clip\_id\_list limit size is 50. \
\*\*Error Code:\*\* \`20002\` \
Clips not belong sourceOwner. \
\*\*Error Code:\*\* \`30001\` \
Source user and target user have processing transfer task. \
\*\*Error Code:\*\* \`10002\` \
Can not found any clip by clip\_id\_list \
##### Status: 401 \*\*HTTP Status Code:\*\* \`401\` \
Unauthorized \*\*Error Code:\*\* \`1002\` \
No authenticated \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`1003\` \
No permission to operate \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
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](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:read:admin` **[Granular Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `clips:read:transfer_task_status:admin` **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `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:** ```json { "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\` \
Bad Request \*\*Error Code:\*\* \`10001\` \
Missing field. \
##### Status: 401 \*\*HTTP Status Code:\*\* \`401\` \
Unauthorized \*\*Error Code:\*\* \`1002\` \
No authenticated. \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`1003\` \
No permission to operate \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`10002\` \
Can not found any async task by taskId and accountId. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
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](https://developers.zoom.us/docs/integrations/create/), this API can only be used on behalf of a user who is assigned with a [role](https://support.zoom.us/hc/en-us/articles/115001078646-Using-role-management#:~:text=Each%20user%20in%20a%20Zoom,owner%2C%20administrator%2C%20or%20member.\&text=Role%2Dbased%20access%20control%20enables,needs%20to%20view%20or%20edit.) with **Edit** permission for **Zoom Clips**. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `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:** ```json { "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:** ```json { "clip_id": "xBvggqyjQUal6TecwMlYwE" } ``` ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
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](https://marketplace.zoom.us/docs/guides/getting-started/app-types/create-oauth-app), this API can only be used on behalf of a user who is assigned with a [role](https://support.zoom.us/hc/en-us/articles/115001078646-Using-role-management#:~:text=Each%20user%20in%20a%20Zoom,owner%2C%20administrator%2C%20or%20member.\&text=Role%2Dbased%20access%20control%20enables,needs%20to%20view%20or%20edit.) that has the **Edit** permission for **Zoom Clips**. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `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:** ```json { "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:** ```json { "part_number_etag": { "part_number": 1, "etag": "etag1" } } ``` ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
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](https://marketplace.zoom.us/docs/guides/getting-started/app-types/create-oauth-app), this API can only be used on behalf of a user who is assigned with a [role](https://support.zoom.us/hc/en-us/articles/115001078646-Using-role-management#:~:text=Each%20user%20in%20a%20Zoom,owner%2C%20administrator%2C%20or%20member.\&text=Role%2Dbased%20access%20control%20enables,needs%20to%20view%20or%20edit.) with **Edit** permission for **Zoom Clips**. **[Scopes](https://developers.zoom.us/docs/integrations/oauth-scopes-overview/):** `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:** ```json { "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:** ```json { "upload_context": "noNpr2pkBEv4_fTxYWDEHBsSs3pl8keRx4fPZmnyNDe.SPdodJp.3UZDaCI2xRVzkRh0xeEV6RuOrXZpJQBPutWCS424c2YnHVxVh8b9.4DNwd4VErRuD98jeJBwRCgz6rC3I4NQg5zXAtCqPFoC0g--" } ``` ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rest/rate-limits/).