# Video SDK - **OpenAPI Version:** `3.1.1` - **API Version:** `2` Use The Video SDK **API Key** and **API Secret** to authorize requests to the Video SDK APIs and [Account Settings APIs](/docs/api/accounts/#tag/accounts). Zoom Video SDK APIs use [JSON Web Tokens (JWT)](https://datatracker.ietf.org/doc/html/rfc7519) for authorization. Each request to the Video SDK API must be authorized by an encrypted **Video SDK API JWT** as the request header bearer token. A Video SDK API JWT can be used until the token expires. You can set the token expiry, but we suggest limiting the time up to one hour for increased security. On your [Build Platform App Marketplace page](/docs/build/developer-accounts/), click **View JWT token** in the **API keys** section to quickly generate and use a token. See [Make API Requests](/docs/build/api-request/) to learn how to programmatically generate your own. ## Servers - **URL:** `https://api.zoom.us/v2` ## Operations ### Update Bring Your Own Storage settings - **Method:** `PATCH` - **Path:** `/videosdk/settings/storage` - **Tags:** Byos Storage Change Cloud Recording's Bring Your Own Storage setting. You can enable or disable this recording option. If it is set to true, Zoom will use your selected storage location to store recordings. If it is set to false, Zoom will use Zoom's own storage, charge you for cloud storage, and delete your configured storage locations. **This feature is in beta.** See [Bring your own storage](/docs/video-sdk/storage/) for details. **[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 - **`bring_our_own_storage` (required)** `boolean` — Whether to turn on Bring Your Own Storage (BYOS) or not. Set to \`true\` to enable BYOS or \`false\` to disable it. If you disable BYOS, for security, Zoom will delete all storage location details. - **`storage_location_id`** `string` — The ID for the selected storage location. **Example:** ```json { "bring_our_own_storage": true, "storage_location_id": "LmefoSckQNaw3GSyl74FcA" } ``` #### Responses ##### Status: 204 Return the Storage location switch and selected value. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`400\` \
The storage ID matches the currently selected account. \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`3335\` \
Your account currently does not support CMR BYOS storage. \
\*\*Error Code:\*\* \`3336\` \
Please enable CMR BYOS storage first. Use the API (POST /v2/videosdk/settings/storage/location) to create one and enable this feature. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3310\` \
This storage ID does not exist. \
##### 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 storage location - **Method:** `GET` - **Path:** `/videosdk/settings/storage/location` - **Tags:** Byos Storage List the Bring Your Own Storage (BYOS) location. Lists all settings, except it will not show the AWS access key and secret. **This feature is in beta.** See [Bring your own storage](/docs/video-sdk/storage/) for details. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` **Not supported in Gov cluster** #### Responses ##### Status: 200 List the Bring Your Own Storage (BYOS) location list. ###### Content-Type: application/json **Array of:** - **`id` (required)** `string` — The storage location ID. - **`name` (required)** `string` — The name for your storage location. - **`provider` (required)** `string`, possible values: `"aws_s3"` — The provider (currently only supports \`aws\_s3\`). - **`s3` (required)** `object` — Currently only supports Amazon S3 access key and secret. - **`authentication_mechanism` (required)** `string`, possible values: `"aws_access_key"` — The authentication mechanism (currently only supports \`aws\_access\_key\`). - **`bucket` (required)** `string` — The Amazon S3 bucket. - **`region` (required)** `string` — The AWS region. - **`selected`** `boolean` — Storage is now customer-selected. **Example:** ```json [ { "id": "9lXuCXgOTIqocq81iotCdQ", "name": "11111", "provider": "aws_s3", "selected": true, "s3": { "region": "us-east-2", "bucket": "testpbx", "authentication_mechanism": "aws_access_key" } } ] ``` ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`3335\` \
Your account currently does not support CMR BYOS storage. \
\*\*Error Code:\*\* \`3336\` \
Please enable CMR BYOS storage first. Use the API (POST /v2/videosdk/settings/storage/location) to create one and enable this feature. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rest/rate-limits/). ### Add storage location - **Method:** `POST` - **Path:** `/videosdk/settings/storage/location` - **Tags:** Byos Storage Add the Bring Your Own Storage (BYOS) location. **This feature is in beta.** See [Bring your own storage](/docs/video-sdk/storage/) for details. **[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 - **`name` (required)** `string` — The name for your storage location. - **`provider` (required)** `string`, possible values: `"aws_s3"` — The provider (currently only supports \`aws\_s3\`). - **`s3` (required)** `object` — Currently only supports Amazon S3 access key and secret. - **`access_key` (required)** `object` — When \`authentication\_mechanism\` value is \`aws\_access\_key\`. - **`id` (required)** `string` — The AWS access key. - **`key` (required)** `string` — The AWS secret. - **`authentication_mechanism` (required)** `string`, possible values: `"aws_access_key"` — The authentication mechanism (currently only supports \`aws\_access\_key\`, which uses the S3 access key). - **`bucket` (required)** `string` — The Amazon S3 bucket. - **`region` (required)** `string` — The AWS region. **Example:** ```json { "name": "0827aksk", "provider": "aws_s3", "s3": { "region": "us-east-2", "bucket": "testpbx", "authentication_mechanism": "aws_access_key", "access_key": { "id": "access key", "key": "secret key" } } } ``` #### Responses ##### Status: 201 Return the add success object. ###### Content-Type: application/json - **`id` (required)** `string` — The storage location ID. - **`name` (required)** `string` — The name for your storage location. - **`provider` (required)** `string`, possible values: `"aws_s3"` — The provider (currently only supports \`aws\_s3\`). - **`s3` (required)** `object` — Currently only supports Amazon S3 access key and secret. - **`authentication_mechanism` (required)** `string`, possible values: `"aws_access_key"` — The authentication mechanism (currently only supports \`aws\_access\_key\`, which uses the S3 access key). - **`bucket` (required)** `string` — The Amazon S3 bucket. - **`region` (required)** `string` — The AWS region. **Example:** ```json { "id": "GOSG08LQQoeDyyRAO6GgLw", "name": "0827aksk", "provider": "aws_s3", "s3": { "region": "us-east-2", "bucket": "testpbx", "authentication_mechanism": "aws_access_key" } } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`3313\` \
Unable to connect to the storage location. Please check your configuration and try again. \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`3335\` \
Your account currently does not support CMR BYOS storage. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rest/rate-limits/). ### Storage location detail - **Method:** `GET` - **Path:** `/videosdk/settings/storage/location/{storageLocationId}` - **Tags:** Byos Storage Get details about one of the Bring Your Own Storage (BYOS) locations. This won't show the AWS access key and secret. **This feature is in beta.** See [Bring your own storage](/docs/video-sdk/storage/) for details. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` **Not supported in Gov cluster** #### Responses ##### Status: 200 Details about one of the Bring Your Own Storage (BYOS) locations. ###### Content-Type: application/json - **`id` (required)** `string` — The storage location ID. - **`name` (required)** `string` — The custom name. - **`provider` (required)** `string`, possible values: `"aws_s3"` — The provider (currently only supports \`aws\_s3\` enum). - **`s3` (required)** `object` — Currently only supports Amazon S3 access key and secret. - **`authentication_mechanism` (required)** `string`, possible values: `"aws_access_key"` — The authentication mechanism (currently only supports \`aws\_access\_key\` enum). - **`bucket` (required)** `string` — The Amazon S3 bucket. - **`region` (required)** `string` — The AWS region. - **`verify_status` (required)** `string`, possible values: `"success", "failure"` — The verifification status for this storage location. **Example:** ```json { "id": "7kdwg5y0Ra6B2vWdtXUJOQ", "name": "newpbx123", "provider": "aws_s3", "s3": { "region": "us-east-1", "bucket": "testpbx", "authentication_mechanism": "aws_access_key" }, "verify_status": "success" } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`400\` \
Invalid parameters. \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`3335\` \
Your account currently does not support CMR BYOS storage. \
\*\*Error Code:\*\* \`3336\` \
Please enable CMR BYOS storage first. Use the API (POST /v2/videosdk/settings/storage/location) to create one and enable this feature. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3310\` \
This storage ID does not exist. \
##### 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 storage location detail - **Method:** `DELETE` - **Path:** `/videosdk/settings/storage/location/{storageLocationId}` - **Tags:** Byos Storage Delete one of the the Bring Your Own Storage (BYOS) storage locations. **This feature is in beta.** See [Bring your own storage](/docs/video-sdk/storage/) for details. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` **Not supported in Gov cluster** #### Responses ##### Status: 204 Delete Bring Your Own Storage (BYOS) storage location. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`400\` \
Invalid parameters. \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`3335\` \
Your account currently does not support CMR BYOS storage. \
\*\*Error Code:\*\* \`3336\` \
Please enable CMR BYOS storage first. Use the API (POST /v2/videosdk/settings/storage/location) to create one and enable this feature. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3310\` \
This storage ID does not exist. \
##### Status: 405 \*\*HTTP Status Code:\*\* \`405\` \
Method Not Allowed \*\*Error Code:\*\* \`3312\` \
You cannot delete this bucket, because it is currently being used. To delete, either change to another storage location, or turn off BYOS, then try again. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rest/rate-limits/). ### Change storage location detail - **Method:** `PATCH` - **Path:** `/videosdk/settings/storage/location/{storageLocationId}` - **Tags:** Byos Storage Change one of the Bring Your Own Storage (BYOS) storage location details. **This feature is in beta.** See [Bring your own storage](/docs/video-sdk/storage/) for details. **[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 - **`name`** `string` — The custom name. - **`provider`** `string`, possible values: `"aws_s3"` — The provider (currently only supports \`aws\_s3\`). - **`s3`** `object` — Currently only supports Amazon S3 access key and secret. - **`access_key`** `object` — When \`authentication\_mechanism\` value is \`aws\_access\_key\`. - **`id`** `string` — The AWS access key. When you get or list the storage location detail, this key will be blocked. - **`key`** `string` — The AWS secret. When you get or list the storage location detail, this secret will be blocked. - **`authentication_mechanism`** `string`, possible values: `"aws_access_key"` — The authentication mechanism (currently only supports \`aws\_access\_key\`). - **`bucket`** `string` — The Amazon S3 bucket (cannot change bucket). - **`region`** `string` — The AWS region (cannot change region). **Example:** ```json { "name": "newpbx1234567", "provider": "aws_s3", "s3": { "region": "us-east-1", "bucket": "testpbx", "authentication_mechanism": "aws_access_key", "access_key": { "id": "access_key", "key": "secret_key" } } } ``` #### Responses ##### Status: 204 The Bring Your Own Storage (BYOS) location detail. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`400\` \
Can not change the bucket and region. \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`3335\` \
Your account currently does not support CMR BYOS storage. \
\*\*Error Code:\*\* \`3336\` \
Please enable CMR BYOS storage first. Use the API (POST /v2/videosdk/settings/storage/location) to create one and enable this feature. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found This storage ID does not exist. ##### 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 recordings of an account - **Method:** `GET` - **Path:** `/videosdk/recordings` - **Tags:** Cloud Recording List **Video SDK Cloud Recordings** available on an Account. To access a password protected cloud recording, add an `access_token` parameter to the download URL and provide your [Video SDK API JWT](https://marketplace.zoom.us/docs/guides/build/video-sdk-app/#video-sdk-and-api-credentials) as the value of the `access_token`. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` List of recording objects returned. ###### Content-Type: application/json **All of:** - **`from`** `string` — The start date of the query date range. - **`next_page_token`** `string` — The next page token to paginate through large result sets. - **`page_size`** `integer` — The number of records returned within a single API call. - **`to`** `string` — The end date of the query date range. - **`total_records`** `integer` — The number of all records available across pages. * **`sessions`** `array` — List of recording sessions **Items:** **All of:** - **`duration`** `integer` — Session duration. - **`recording_count`** `integer` — Number of recording files returned in the response of this API call. This includes the \`recording\_files\` and \`participant\_audio\_files\` files. - **`session_id`** `string` — Unique session identifier. Each instance of the session will have its own \`session\_id\`. - **`session_key`** `string` — The Video SDK custom session ID. - **`session_name`** `string` — Session name. - **`start_time`** `string`, format: `date-time` — The time at which the session started. - **`total_size`** `integer`, format: `int64` — The total file size of the recording. This includes the \`recording\_files\` and \`participant\_audio\_files\` files. **All of:** - **`recording_files`** `array` — List of recording files. **Items:** **All of:** - **`deleted_time`** `string` — The time at which the recording was deleted. Returned in the response only for the trash query. - **`download_url`** `string` — The URL to download the recording. To download, set your \[Video SDK API JWT]\(https\://developers.zoom.us/docs/video-sdk/api-request/) as a Bearer token in the Authorization header of your HTTP request. For example: \`curl "{download\_url}" --header "authorization: Bearer {JWT}" --header "content-type: application/json"\`. Note: The \`download\_url\` may be a redirect. In that case, use \`curl --location "{download\_url}"\` to follow redirects or use another tool, like Postman. - **`external_storage_url`** `string` — The S3 path for bring your own storage recording. - **`file_size`** `number` — The recording file size. - **`file_type`** `string` — The recording file type. The value of this field could be one of the following: \`MP4\`: Video file of the recording. \`M4A\` Audio-only file of the recording. \`TIMELINE\`: Timestamped file of the recording in JSON file format. To get a timeline file, the 'Add a timestamp to the recording'. You must enable this setting in the recording settings. See \[Video SDK Account: Enable cloud recording]\(https\://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details). The time will display in the account's timezone, set in their Zoom profile. \`TRANSCRIPT\`: Transcription file of the recording in VTT format. \`CHAT\`: A TXT file containing in-session chat messages that were sent during the session. \`CC\`: File containing closed captions of the recording in VTT file format. \`CSV\`: File containing polling data in CSV format. A recording file object with file type of either \`CC\` or \`TIMELINE\` \*\*does not have\*\* the following properties: \`id\`, \`status\`, \`file\_size\`, and \`recording\_type\`. - **`id`** `string` — The recording file ID. This is included in the general query response. - **`recording_end`** `string` — The recording end time. This is included in the the general query response. - **`recording_start`** `string` — The recording start time. - **`recording_type`** `string` — The recording type. The value of this field can be one of the following: \`shared\_screen\_with\_speaker\_view(CC)\` \`shared\_screen\_with\_speaker\_view\` \`shared\_screen\_with\_gallery\_view\` \`active\_speaker\` \`gallery\_view\` \`shared\_screen\` \`audio\_only\` \`audio\_transcript\` \`chat\_file\` \`poll\` \`timeline\` \`closed\_caption\` \`local\_transcript\` \`original\_transcript\` - **`status`** `string`, possible values: `"completed"` — The recording status. **All of:** - **`participant_video_files`** `array` — A list of recording files. The API only returns this response when the \*\*Record a separate audio file of each participant\*\* setting is enabled. **Items:** **All of:** - **`download_url`** `string` — The URL to download the recording. To download, set your \[Video SDK API JWT]\(https\://developers.zoom.us/docs/video-sdk/api-request/) as a Bearer token in the Authorization header of your HTTP request. For example: \`curl "{download\_url}" --header "authorization: Bearer {JWT}" --header "content-type: application/json"\`. Note: The \`download\_url\` may be a redirect. In that case, use \`curl --location "{download\_url}"\` to follow redirects or use another tool, like Postman. - **`file_extension`** `string` — The archived file's file extension. - **`file_name`** `string` — The recording file's name. - **`file_size`** `number` — The recording file's size, in bytes. - **`file_type`** `string` — The recording file's format. One of: \* \`MP4\` - Video file. \* \`M4A\` - Audio-only file. \* \`TIMELINE\` - Timestamp file of the recording, in JSON file format. To get a timeline file, you must enable the \*\*Add a timestamp to the recording\*\* setting in the recording settings. See \[Video SDK Account: Enable could recording]\(https\://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details. The time will display in the account's timezone. \* \`TRANSCRIPT\` - A transcript of the recording, in VTT format. \* \`CHAT\` - A text file containing chat messages sent during the session. \* \`CC\` - A file containing the closed captions of the recording, in VTT file format. \* \`CSV\` - A file containing polling data, in CSV format. A recording file object with file type of either \`CC\` or \`TIMELINE\` \*\*does not have\*\* the following properties: \`id\`, \`status\`, \`file\_size\`, and \`recording\_type\`. - **`id`** `string` — The recording file's unique ID. This is included in the general query response. - **`recording_end`** `string`, format: `date-time` — The recording file's end time. This is included in the general query response. - **`recording_start`** `string`, format: `date-time` — The recording file's start time. - **`recording_type`** `string`, possible values: `"individual_user", "individual_shared_screen"` — The type of recording file: \* \`individual\_user\` \* \`individual\_shared\_screen\`. - **`status`** `string`, possible values: `"completed"` — The recording file's status. - **`user_id`** `string` — The participant's session user ID. This value is assigned to a participant upon joining a session and is only valid for the duration of the session. - **`user_key`** `string` — The participant's SDK identifier. Set with the \`user\_identity\` key in the Video SDK JWT payload. This value can be alphanumeric, up to a maximum length of 36 characters. **Example:** ```json { "from": "2021-10-11", "to": "2021-11-11", "page_size": 30, "total_records": 100, "next_page_token": "Usse957pzxvmYwlmCZ50a6CNXFrhztxuj82", "sessions": [ { "session_id": "JZiFOknTQ4yH/tJgaUTlkg==", "session_name": "session_name", "start_time": "2022-03-10T02:27:24Z", "duration": 2, "total_size": 444601, "recording_count": 4, "session_key": "ABC36jaBI145", "recording_files": [ { "id": "35497738-9fef-4f8a-97db-0ec34caef065", "recording_start": "2022-03-11T12:34:39Z", "recording_end": "2022-03-11T12:34:42Z", "file_type": "MP4", "file_size": 12125, "download_url": "https://example.com/download_url", "external_storage_url": "s3://cmrpbx/cmr/replay/2024/05/01/77431195-02EC-4B4C-8218-17E716123FCD/cmr_byos/GMT20210906-041233_Recording.m4a", "status": "completed", "deleted_time": "2022-03-28T07:22:22Z", "recording_type": "audio_only" } ], "participant_video_files": [ { "id": "24698bd1-589e-4c33-9ba3-bc788b2a0ac2", "recording_start": "2021-12-07T05:42:13Z", "recording_end": "2021-12-07T05:42:28Z", "file_name": "recording_name", "file_type": "MP4", "file_extension": "MP4", "file_size": 900452, "download_url": "https://download.example.com/download_url", "recording_type": "individual_shared_screen", "status": "completed", "user_id": "abcd1234", "user_key": "efgh5678" } ] } ] } ``` ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`1001\` \
User {userId} not exist or not belong to this account. \
##### 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 session's recordings - **Method:** `GET` - **Path:** `/videosdk/sessions/{sessionId}/recordings` - **Tags:** Cloud Recording Get all the **recordings** from a session instance. The recording files can be downloaded via the `download_url` property listed in the response. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` #### Responses ##### Status: 200 \*\*Error Code:\*\* \`200\` You do not have the right permissions. \*\*HTTP Status Code:\*\* \`200\` Recording object returned. ###### Content-Type: application/json **All of:** **All of:** - **`duration`** `integer` — Session duration. - **`recording_count`** `integer` — Number of recording files returned in the response of this API call. This includes the \`recording\_files\` and \`participant\_audio\_files\` files. - **`session_id`** `string` — Unique session identifier. Each instance of the session will have its own \`session\_id\`. - **`session_key`** `string` — The Video SDK custom session ID. - **`session_name`** `string` — Session name. - **`start_time`** `string`, format: `date-time` — The time at which the session started. - **`total_size`** `integer`, format: `int64` — The total file size of the recording. This includes the \`recording\_files\` and \`participant\_audio\_files\` files. **All of:** - **`recording_files`** `array` — List of recording files. **Items:** **All of:** - **`deleted_time`** `string` — The time at which recording was deleted. Returned in the response only for the trash query. - **`download_url`** `string` — The URL to download the recording. To download, set your \[Video SDK API JWT]\(https\://developers.zoom.us/docs/video-sdk/api-request/) as a Bearer token in the Authorization header of your HTTP request. For example: \`curl "{download\_url}" --header "authorization: Bearer {JWT}" --header "content-type: application/json"\`. Note: The \`download\_url\` may be a redirect. In that case, use \`curl --location "{download\_url}"\` to follow redirects or use another tool, like Postman. - **`external_storage_url`** `string` — The S3 path for bring your own storage recording. - **`file_size`** `number` — The recording file size. - **`file_type`** `string` — The recording file type. One of the following: \`MP4\` - Video file of the recording. \`M4A\` - Audio-only file of the recording. \`TIMELINE\` - Timestamped file of the recording in JSON file format. To get a timeline file, you must enable the 'Add a timestamp to the recording' setting in the recording settings. See \[Enable cloud recording]\(https\://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details. The time will display in the host's timezone, set in their Zoom profile. \`TRANSCRIPT\` - Transcription file of the recording in VTT format. \`CHAT\` - A TXT file containing in-session chat messages that were sent during the session. \`CC\` - File containing closed captions of the recording in VTT file format. \`CSV\` - File containing polling data in CSV format. A recording file object with the file type \`CC\` or \`TIMELINE\` \*\*does not have\*\* the \`id\`, \`status\`, \`file\_size\`, or \`recording\_type\` properties. - **`id`** `string` — The recording file ID. Included in the general query response. - **`recording_end`** `string` — The recording end time. Included in the general query response. - **`recording_start`** `string` — The recording start time. - **`recording_type`** `string` — The recording type. The value of this field can be one of the following: \`shared\_screen\_with\_speaker\_view(CC)\` \`shared\_screen\_with\_speaker\_view\` \`shared\_screen\_with\_gallery\_view\` \`active\_speaker\` \`gallery\_view\` \`shared\_screen\` \`audio\_only\` \`audio\_transcript\` \`chat\_file\` \`poll\` \`timeline\` \`closed\_caption\` \`local\_transcript\` \`original\_transcript\` - **`status`** `string`, possible values: `"completed"` — The recording status. **All of:** - **`participant_video_files`** `array` — A list of recording files. The API only returns this response when the \*\*Record a separate audio file of each participant\*\* setting is enabled. **Items:** **All of:** - **`download_url`** `string` — The URL to download the recording. To download, set your \[Video SDK API JWT]\(https\://developers.zoom.us/docs/video-sdk/api-request/) as a Bearer token in the Authorization header of your HTTP request. For example: \`curl "{download\_url}" --header "authorization: Bearer {JWT}" --header "content-type: application/json"\`. Note: The \`download\_url\` may be a redirect. In that case, use \`curl --location "{download\_url}"\` to follow redirects or use another tool, like Postman. - **`file_extension`** `string` — The archived file's file extension. - **`file_name`** `string` — The recording file's name. - **`file_size`** `number` — The recording file's size, in bytes. - **`file_type`** `string` — The recording file's format. One of the following: \* \`MP4\` - Video file. \* \`M4A\` - Audio-only file. \* \`TIMELINE\` - Timestamp file of the recording, in JSON file format. To get a timeline file, you must enable the 'Add a timestamp to the recording' setting in the recording settings. See \[Enable cloud recording]\(https\://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details. The time will display in the host's timezone. \* \`TRANSCRIPT\` - A transcript of the recording, in VTT format. \* \`CHAT\` - A text file containing chat messages sent during the session. \* \`CC\` - A file containing the closed captions of the recording, in VTT file format. \* \`CSV\` - A file containing polling data, in CSV format. A recording file object with the file type \`CC\` or \`TIMELINE\` value \*\*does not have\*\* the \`id\`, \`status\`, \`file\_size\`, or \`recording\_type\` properties. - **`id`** `string` — The recording file's unique ID. This is included in the general query response. - **`recording_end`** `string`, format: `date-time` — The recording file's end time. This is included in the general query response. - **`recording_start`** `string`, format: `date-time` — The recording file's start time. - **`recording_type`** `string`, possible values: `"individual_user", "individual_shared_screen"` — The type of recording file: \* \`individual\_user\` \* \`individual\_shared\_screen\`. - **`status`** `string`, possible values: `"completed"` — The recording file's status. * **`download_access_token`** `string` — The JWT access token for downloading the session recording. This is only returned if the \`include\_fields\` query parameter contains \`download\_access\_token\`. **All of:** - **`participant_audio_files`** `array` — A list of recording files. The API only returns this response when the \*\*Record a separate audio file of each participant\*\* setting is enabled. **Items:** **All of:** - **`download_url`** `string` — The URL to download the recording. To download, set your \[Video SDK API JWT]\(https\://developers.zoom.us/docs/video-sdk/api-request/) as a Bearer token in the Authorization header of your HTTP request. For example: \`curl "{download\_url}" --header "authorization: Bearer {JWT}" --header "content-type: application/json"\`. Note: The \`download\_url\` may be a redirect. In that case, use \`curl --location "{download\_url}"\` to follow redirects or use another tool, like Postman. - **`file_extension`** `string` — The archived file's file extension. - **`file_name`** `string` — The recording file's name. - **`file_size`** `number` — The recording file's size, in bytes. - **`file_type`** `string` — The recording file's format. One of the following: \* \`MP4\` - Video file. \* \`M4A\` - Audio-only file. \* \`TIMELINE\` - Timestamp file of the recording, in JSON file format. To get a timeline file, you must enable the 'Add a timestamp to the recording' setting in the recording settings. See \[Enable cloud recording]\(https\://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details. The time will display in the host's timezone. \* \`TRANSCRIPT\` - A transcript of the recording, in VTT format. \* \`CHAT\` - A text file containing chat messages sent during the session. \* \`CC\` - A file containing the closed captions of the recording, in VTT file format. \* \`CSV\` - A file containing polling data, in CSV format. A recording file object with the file type \`CC\` or \`TIMELINE\` value \*\*does not have\*\* the \`id\`, \`status\`, \`file\_size\`, or \`recording\_type\` properties. - **`id`** `string` — The recording file's unique ID. This is included in the general query response. - **`recording_end`** `string`, format: `date-time` — The recording file's end time. This is included in the general query response. - **`recording_start`** `string`, format: `date-time` — The recording file's start time. - **`status`** `string`, possible values: `"completed"` — The recording file's status. - **`user_id`** `string` — The participant's session user ID. This value is assigned to a participant upon joining a session and is only valid for the duration of the session. - **`user_key`** `string` — The participant's SDK identifier. Set with the \`user\_identity\` key in the Video SDK JWT payload. This value can be alphanumeric, up to a maximum length of 36 characters. **All of:** - **`participant_video_files`** `array` — A list of recording files. The API only returns this response when the \*\*Record a separate audio file of each participant\*\* setting is enabled. **Items:** **All of:** - **`download_url`** `string` — The URL to download the recording. To download, set your \[Video SDK API JWT]\(https\://developers.zoom.us/docs/video-sdk/api-request/) as a Bearer token in the Authorization header of your HTTP request. For example: \`curl "{download\_url}" --header "authorization: Bearer {JWT}" --header "content-type: application/json"\`. Note: The \`download\_url\` may be a redirect. In that case, use \`curl --location "{download\_url}"\` to follow redirects or use another tool, like Postman. - **`file_extension`** `string` — The archived file's file extension. - **`file_name`** `string` — The recording file's name. - **`file_size`** `number` — The recording file's size, in bytes. - **`file_type`** `string` — The recording file's format. One of the following: \* \`MP4\` - Video file. \* \`M4A\` - Audio-only file. \* \`TIMELINE\` - Timestamp file of the recording, in JSON file format. To get a timeline file, you must enable the 'Add a timestamp to the recording' setting in the recording settings. See \[Enable cloud recording]\(https\://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details. The time will display in the host's timezone. \* \`TRANSCRIPT\` - A transcript of the recording, in VTT format. \* \`CHAT\` - A text file containing chat messages sent during the session. \* \`CC\` - A file containing the closed captions of the recording, in VTT file format. \* \`CSV\` - A file containing polling data, in CSV format. A recording file object with the file type \`CC\` or \`TIMELINE\` \*\*does not\*\* have the \`id\`, \`status\`, \`file\_size\`, or \`recording\_type\` properties. - **`id`** `string` — The recording file's unique ID. This is included in the general query response. - **`recording_end`** `string`, format: `date-time` — The recording file's end time. This is included in the general query response. - **`recording_start`** `string`, format: `date-time` — The recording file's start time. - **`recording_type`** `string`, possible values: `"individual_user", "individual_shared_screen"` — The type of recording file: \* \`individual\_user\` \* \`individual\_shared\_screen\`. - **`status`** `string`, possible values: `"completed"` — The recording file's status. - **`user_id`** `string` — The participant's session user ID. This value is assigned to a participant upon joining a session and is only valid for the duration of the session. - **`user_key`** `string` — The participant's SDK identifier. Set with the \`user\_identity\` key in the Video SDK JWT payload. This value can be alphanumeric, up to a maximum length of 36 characters. **Example:** ```json { "session_id": "JZiFOknTQ4yH/tJgaUTlkg==", "session_name": "session_name", "start_time": "2022-03-10T02:27:24Z", "duration": 2, "total_size": 444601, "recording_count": 4, "session_key": "ABC36jaBI145", "recording_files": [ { "id": "35497738-9fef-4f8a-97db-0ec34caef065", "recording_start": "2022-03-11T12:34:39Z", "recording_end": "2022-03-11T12:34:42Z", "file_type": "MP4", "file_size": 12125, "download_url": "https://example.com/download_url", "external_storage_url": "s3://cmrpbx/cmr/replay/2024/05/01/77431195-02EC-4B4C-8218-17E716123FCD/cmr_byos/GMT20210906-041233_Recording.m4a", "status": "completed", "deleted_time": "2022-03-28T07:22:22Z", "recording_type": "audio_only" } ], "participant_video_files": [ { "id": "24698bd1-589e-4c33-9ba3-bc788b2a0ac2", "recording_start": "2021-12-07T05:42:13Z", "recording_end": "2021-12-07T05:42:28Z", "file_name": "recording_name", "file_type": "MP4", "file_extension": "MP4", "file_size": 900452, "download_url": "https://download.example.com/download_url", "recording_type": "individual_shared_screen", "status": "completed", "user_id": "abcd1234", "user_key": "efgh5678" } ], "download_access_token": "exampleTokenXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "participant_audio_files": [ { "id": "24698bd1-589e-4c33-9ba3-bc788b2a0ac2", "recording_start": "2021-12-07T05:42:13Z", "recording_end": "2021-12-07T05:42:28Z", "file_name": "recording_name", "file_type": "MP4", "file_extension": "MP4", "file_size": 900452, "download_url": "https://download.example.com/download_url", "status": "completed", "user_id": "abcd1234", "user_key": "efgh5678" } ] } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`1010\` \
User not found on this account: {accountId}. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3301\` \
There is no recording for this session. \
##### 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 session's recordings - **Method:** `DELETE` - **Path:** `/videosdk/sessions/{sessionId}/recordings` - **Tags:** Cloud Recording Delete all recording files of a session. **Prerequisites**: - Cloud Recording should be enabled on the user's account. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` #### Responses ##### Status: 204 The recording was successfully deleted. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`1010\` \
User does not belong to this account: {accountId}. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3301\` \
There is no recording for this session. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rest/rate-limits/). ### Recover session's recordings - **Method:** `PUT` - **Path:** `/videosdk/sessions/{sessionId}/recordings/status` - **Tags:** Cloud Recording Zoom allows users to recover recordings from trash for up to 30 days from the deletion date. **Prerequisites**: - Video SDK account with Cloud Recording enabled. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Light` #### Request Body ##### Content-Type: application/json - **`action`** `string`, possible values: `"recover"` **Example:** ```json { "action": "recover" } ``` #### Responses ##### Status: 200 \*\*Error Code:\*\* \`200\` You do not have the right permissions. ##### Status: 204 \*\*HTTP Status Code:\*\* \`204\` Deleted recordings of the session recovered. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`1010\` \
User does not belong to this account: {accountId}. ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`1001\` \
User does not exist: {userId}.\
\*\*Error Code:\*\* \`3301\` \
There is no recording for this session. ##### 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 session's recording file - **Method:** `DELETE` - **Path:** `/videosdk/sessions/{sessionId}/recordings/{recordingId}` - **Tags:** Cloud Recording Delete a specific recording file from a session. **Note:** To use this API, you must enable the **The host can delete cloud recordings** setting. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` #### Responses ##### Status: 204 The recording file was successfully deleted. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`1010\` \
User does not belong to this account: {accountId}.\
\
\*\*Error Code:\*\* \`3303\` \
You can not delete an uncompleted session. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3301\` \
There is no recording for this session. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rest/rate-limits/). ### Recover a single recording - **Method:** `PUT` - **Path:** `/videosdk/sessions/{sessionId}/recordings/{recordingId}/status` - **Tags:** Cloud Recording Zoom allows users to recover recordings from trash for up to 30 days from the deletion date. Use this API to recover a single recording file from the session. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Light` #### Request Body ##### Content-Type: application/json - **`action`** `string`, possible values: `"recover"` **Example:** ```json { "action": "recover" } ``` #### Responses ##### Status: 204 \*\*HTTP Status Code:\*\* \`204\` Session recording recovered. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`1010\` \
User does not belong to this account: {accountId}. ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3301\` \
There is no recording for this session. ##### 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 sessions - **Method:** `GET` - **Path:** `/videosdk/sessions` - **Tags:** Sessions List the total live or past sessions that occurred during a specified period of time. You can specify a monthly date range for this data using the `from` and `to` query parameters. The month should fall within the last six months. The report only includes one month's worth of data. The response displays whether features such as audio, video, screen sharing, and recording were used during the session. **Prerequisites:** - A Video SDK account **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `RESOURCE-INTENSIVE` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` Sessions returned. Only available for paid accounts that have dashboard feature enabled. ###### Content-Type: application/json - **`from`** `string`, format: `date` — The report's start date, in 'yyyy-mm-dd' format. - **`next_page_token`** `string` — Used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes. - **`page_size`** `integer`, default: `30` — The number of records returned within a single API call. - **`sessions`** `array` — Information about the session. **Items:** - **`audio_quality`** `string`, possible values: `"good", "fair", "poor", "bad"` — \* \`good\` - The audio is almost flawless and the quality is excellent. \* \`fair\` - The audio occasionally has distortion, noise, and other problems, but the content is basically continuous. Users can communicate normally. \* \`poor\` - The audio often has distortion, noise, and other problems, but the content is basically continuous. Users can communicate normally. \* \`bad\` - The sound quality is extremely poor and the audio content is almost inaudible. - **`duration`** `string` — The session's duration, in 'hh:mm:ss' format. - **`end_time`** `string`, format: `date-time` — The session's end time. - **`has_pstn`** `boolean` — Whether the PSTN feature was used in the session. - **`has_recording`** `boolean` — Whether the recording feature was used in the session. - **`has_screen_share`** `boolean` — Whether the screen share feature was used in the session. - **`has_session_summary`** `boolean` — Whether the session summary was used in the session. - **`has_video`** `boolean` — Whether video was used in the session. - **`has_voip`** `boolean` — Whether VoIP was used in the session. - **`id`** `string` — The session's ID. If the ID begins with a \`+\`, \`/\`, or contains \`//\` characters, you must \*\*double-encode\*\* this value. - **`screen_share_quality`** `string`, possible values: `"good", "fair", "poor", "bad"` — \* \`good\` - The video is almost flawless and the quality is excellent. \* \`fair\` - The video definition is high, occasionally gets stuck, fast or slow, or other problems, but the frequency is very low and the video quality is good. \* \`poor\` - The video definition is not high, but not many problems exist. The video quality is mediocre. \* \`bad\` - The picture is very blurred and often gets stuck. - **`session_key`** `string` — The Video SDK custom session ID. - **`session_name`** `string` — The session's name. - **`start_time`** `string`, format: `date-time` — The session's start time. - **`user_count`** `integer` — The session's user count. - **`video_quality`** `string`, possible values: `"good", "fair", "poor", "bad"` — \* \`good\` - The video is almost flawless and the quality is excellent. \* \`fair\` - The video definition is high, occasionally gets stuck, fast or slow, or other problems, but the frequency is very low and the video quality is good. \* \`poor\` - The video definition is not high, but not many problems exist. The video quality is mediocre. \* \`bad\` - The picture is very blurred and often gets stuck. - **`to`** `string`, format: `date` — The report's end date, in 'yyyy-mm-dd' format. **Example:** ```json { "from": "2021-12-01", "to": "2021-12-02", "page_size": 30, "next_page_token": "suQA5LvDBnH5No5OYD7mqpJuFzJqUOHK8U2", "sessions": [ { "id": "sfk/aOFJSJSYhGwk1hnxgw==", "session_name": "My session", "start_time": "2019-08-20T19:09:01Z", "end_time": "2019-08-20T19:19:01Z", "duration": "30:00", "user_count": 2, "has_voip": true, "has_video": true, "has_screen_share": true, "has_recording": true, "has_pstn": true, "session_key": "my_session_key", "has_session_summary": true, "audio_quality": "good", "video_quality": "good", "screen_share_quality": "good" } ] } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
##### Status: 401 \*\*HTTP Status Code:\*\* \`401\` \
Unauthorized ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden ##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Create a session - **Method:** `POST` - **Path:** `/videosdk/sessions` - **Tags:** Sessions Create a Video SDK session. This API is designed to get the PSTN or SIP dial in information before starting a session with the session name specified in this API. The Create a session API is not required for creating or starting a Video SDK session. Zoom creates and starts Video SDK sessions on demand when the first user joins, see the Video SDK Session documentation for your platform for details. Video SDK sessions only show up in the dashboard or REST API reports when they are live or completed. **Prerequisites:** - A Video SDK account. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` #### Request Body ##### Content-Type: application/json - **`session_name` (required)** `string` — The session's name. - **`session_password`** `string` — Developer provided session alphanumeric password. It is equivalent to the sessionPassword in the Video SDK interface. - **`settings`** `object` — Information about the session's settings. - **`auto_recording`** `string`, possible values: `"cloud", "none"`, default: `"none"` — The automatic recording settings. \* \`cloud\` - Record the session to the cloud. \* \`none\` - Auto-recording disabled. **Example:** ```json { "session_name": "My session", "session_password": "123456", "settings": { "auto_recording": "cloud" } } ``` #### Responses ##### Status: 201 \*\*HTTP Status Code:\*\* \`201\` Session created. ###### Content-Type: application/json - **`session_name` (required)** `string` — The session's name. - **`created_at`** `string`, format: `date-time` — The date and time when this session was created. - **`passcode`** `string` — Zoom generated numeric code to use when joining the session by phone (PSTN), or from a room (H323/SIP device). - **`session_id`** `string` — The session's ID. If this field's value includes any \`/\` characters, you must \*\*double-encode\*\* the value. - **`session_number`** `integer`, format: `int64` — The session's number. Unique identifier of the session in \*\*long\*\* format, represented as an int64 data type in JSON. - **`session_password`** `string` — Developer provided session alphanumeric password. It is equivalent to the sessionPassword in the Video SDK interface. - **`settings`** `object` — Information about the session's settings. - **`auto_recording`** `string`, possible values: `"cloud", "none"`, default: `"none"` — The automatic recording settings. \* \`cloud\` - Record the session to the cloud. \* \`none\` - Auto-recording disabled. - **`global_dial_in_countries`** `array` — A list of available global dial-in countries. **Items:** `string` - **`global_dial_in_numbers`** `array` — Global dial-in countries or regions. **Items:** - **`country`** `string` — The country code. - **`country_name`** `string` — Full name of country. - **`number`** `string` — The phone number, such as +1 2332357613. - **`type`** `string`, possible values: `"toll", "tollfree", "premium"` — Type of number. **Example:** ```json { "session_id": "sfk/aOFJSJSYhGwk1hnxgw==", "session_number": 97763643886, "session_name": "My session", "session_password": "123456", "passcode": "123456", "created_at": "2022-03-25T07:29:29Z", "settings": { "auto_recording": "cloud", "global_dial_in_countries": [ "US" ], "global_dial_in_numbers": [ { "country": "US", "country_name": "US", "number": "+1 1000200200", "type": "toll" } ] } } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`3000\` \
Session name already exists. Try a different session name. \
##### 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 session details - **Method:** `GET` - **Path:** `/videosdk/sessions/{sessionId}` - **Tags:** Sessions Get information about scheduled, live, or past sessions. The overview response displays whether features such as audio, video, screen sharing, and recording were used during the session. **Prerequisites:** - A Video SDK account **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `HEAVY` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` Session returned. ###### Content-Type: application/json - **`audio_quality`** `string`, possible values: `"good", "fair", "poor", "bad"` — \* \`good\` - The audio is almost flawless and the quality is excellent. \* \`fair\` - The audio occasionally has distortion, noise, and other problems, but the content is basically continuous. Users can communicate normally. \* \`poor\` - The audio often has distortion, noise, and other problems, but the content is basically continuous. Users can communicate normally. \* \`bad\` - The sound quality is extremely poor and the audio content is almost inaudible. - **`created_at`** `string`, format: `date-time` — The date and time when this session was created. - **`duration`** `string` — The session's duration, in \`hh:mm:ss\` format. - **`end_time`** `string`, format: `date-time` — The session's end time. - **`has_pstn`** `boolean` — Whether the PSTN feature was used in the session. - **`has_recording`** `boolean` — Whether the recording feature was used in the session. - **`has_screen_share`** `boolean` — Whether the screen share feature was used in the session. - **`has_session_summary`** `boolean` — Whether the session summary was used in the session. - **`has_video`** `boolean` — Whether video was used in the session. - **`has_voip`** `boolean` — Whether VoIP was used in the session. - **`id`** `string` — The session's ID. If the ID begins with a \`+\`, \`/\` or contains \`//\` characters, you must \*\*double-encode\*\* this value. - **`passcode`** `string` — The session's passcode. - **`screen_share_quality`** `string`, possible values: `"good", "fair", "poor", "bad"` — \* \`good\` - The video is almost flawless and the quality is excellent. \* \`fair\` - The video definition is high, occasionally gets stuck, fast or slow, or other problems, but the frequency is very low and the video quality is good. \* \`poor\` - The video definition is not high, but not many problems exist. The video quality is mediocre. \* \`bad\` - The picture is very blurred and often gets stuck. - **`session_key`** `string` — The Video SDK custom session ID. - **`session_name`** `string` — The session's name. - **`session_number`** `integer`, format: `int64` — The session's number. Unique identifier of the session in \*\*long\*\* format, represented as an int64 data type in JSON. - **`settings`** `object` — Information about the session's settings. Only returns if type=scheduled. - **`auto_recording`** `string`, possible values: `"cloud", "none"`, default: `"none"` — The automatic recording settings. \* \`cloud\` - Record the session to the cloud. \* \`none\` - Auto-recording disabled. - **`global_dial_in_countries`** `array` — A list of available global dial-in countries. **Items:** `string` - **`global_dial_in_numbers`** `array` — Global dial-in countries or regions. **Items:** - **`country`** `string` — The country code. - **`country_name`** `string` — Full name of country. - **`number`** `string` — The phone number, such as +1 2332357613. - **`type`** `string`, possible values: `"toll", "tollfree", "premium"` — Type of number. - **`start_time`** `string`, format: `date-time` — The session's start time. - **`total_minutes`** `integer` — The total number of minutes attended by the sessions's host and users. - **`user_count`** `integer` — The session's user count. - **`video_quality`** `string`, possible values: `"good", "fair", "poor", "bad"` — \* \`good\` - The video is almost flawless and the quality is excellent. \* \`fair\` - The video definition is high, occasionally gets stuck, fast or slow, or other problems, but the frequency is very low and the video quality is good. \* \`poor\` - The video definition is not high, but not many problems exist. The video quality is mediocre. \* \`bad\` - The picture is very blurred and often gets stuck. **Example:** ```json { "id": "sfk/aOFJSJSYhGwk1hnxgw==", "session_number": 97763643886, "session_name": "My session", "passcode": "123456", "start_time": "2019-08-20T19:09:01Z", "end_time": "2019-08-20T19:19:01Z", "duration": "30:00", "user_count": 2, "has_voip": true, "has_video": true, "has_screen_share": true, "has_recording": true, "has_pstn": true, "session_key": "my_session_key", "has_session_summary": true, "created_at": "2022-03-25T07:29:29Z", "settings": { "auto_recording": "cloud", "global_dial_in_countries": [ "US" ], "global_dial_in_numbers": [ { "country": "US", "country_name": "US", "number": "+1 1000200200", "type": "toll" } ] }, "audio_quality": "good", "video_quality": "good", "screen_share_quality": "good", "total_minutes": 1 } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
##### Status: 401 \*\*HTTP Status Code:\*\* \`401\` \
Unauthorized ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3001\` \
Session does not exist. \
##### 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 session - **Method:** `DELETE` - **Path:** `/videosdk/sessions/{sessionId}` - **Tags:** Sessions Delete a session. **Prerequisites:** - A Video SDK account. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` #### Responses ##### Status: 204 \*\*HTTP Status Code\*\*: \`204\` Session deleted. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`3000\` \
You cannot delete sessions that have started. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3001\` \
Session does not exist: {sessionId}. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rest/rate-limits/). ### Use in-session events controls - **Method:** `PATCH` - **Path:** `/videosdk/sessions/{sessionId}/events` - **Tags:** Sessions Control in-session events such as the **recording controls** to start a recording, stop a recording, pause a recording, and resume a recording, and **invitation control** to invite users. The recording controls only work for cloud recordings and not for local recordings. **Prerequisite:** - The session must be a live session. - Cloud recording must be enabled for recording controls. - The user using this API must either be the host or manager of the session. - You must have a Conference Room Connector add-on plan to invite users to the session using a room system callout. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` #### Request Body ##### Content-Type: application/json - **`method`** `string`, possible values: `"recording.start", "recording.stop", "recording.pause", "recording.resume", "user.invite.callout", "user.invite.room_system_callout", "stream_ingestion.bind", "stream_ingestion.unbind", "stream_ingestion.send", "stream_ingestion.stop", "audio.block", "audio.unblock", "video.block", "video.unblock", "share.block", "share.unblock", "user.remove"` — The method that you would like to control. The value of this field can be one of the following. \* \`recording.start\` - Start the recording. \* \`recording.stop\` - Stop the recording. \* \`recording.pause\` - Pause the recording. \* \`recording.resume\` - Resume the recording that was previously paused. \* \`user.invite.callout\` - Invite a user to the session through call out (phone). Requires that you purchase and set up the Audio Conferencing plan. See \[Video SDK account settings]\(/docs/video-sdk/account/#customize-audio-conferencing) for details. \* \`user.invite.room\_system\_callout\` - Invite a user to the session through call out (room system). This works like \[Inviting others to join a Zoom Rooms meeting]\(https\://support.zoom.com/hc/en/article?id=zm\_kb\&sysparm\_article=KB0065721) in Zoom Meeting. See the link for details. Use these values for Real-Time Messaging Protocol (RTMP) ingestion for a live session (you must also add a \`stream\_ingestion\_stream\_id\` to the request). \* \`stream\_ingestion.bind\` - Bind a stream key to a session. \* \`stream\_ingestion.unbind\` - Unbind a stream key to a session. You can bind the unbound stream key to another live session. \* \`stream\_ingestion.send\` - Send ingested stream data into a session. \* \`stream\_ingestion.stop\` - Stop sending ingested stream data into a session. Contact \[Developer Support]\(https\://developers.zoom.us/support/) to enable the following moderation features. \* \`audio.block\` - Mute the user's audio and disallow self-unmute. \* \`audio.unblock\` - Allow users to unmute themselves. \* \`video.block\` - Stop the user's video and disallow self-starting. \* \`video.unblock\` - Allow users to start the video themselves. \* \`share.block\` - Stop the user's share and disallow self-starting. \* \`share.unblock\` - Allow users to start sharing themselves. \* \`user.remove\` - Remove a user from a session. - **`params`** `object` — The in-session parameters. - **`call_type`** `string` — The type of call out. Use a value of \`h323\` or \`sip\`. Use this field if you pass the \`user.invite.room\_system\_callout\` value for the \`method\` field. - **`device_ip`** `string` — The user's device IP address. Use this field if you pass the \`user.invite.room\_system\_callout\` value for the \`method\` field. - **`h323_headers`** `object` — Enable customers to leverage services that require customization of the FROM header to identify the caller. Use this field if you pass the \`user.invite.room\_system\_callout\` value for the \`method\` field and the \`h323\` value for the \`call\_type\` field. - **`from_display_name`** `string` — Custom name that will be used within the \`h323\` header. - **`to_display_name`** `string` — Custom remote name that will be used within the session. - **`invite_options`** `object` — Information about the \`user.invite.callout\` settings. - **`require_greeting`** `boolean`, default: `true` — Whether to require a greeting before being connected. Use this field if you pass the \`user.invite.callout\` value for the \`method\` field. - **`require_pressing_one`** `boolean`, default: `true` — Whether to require pressing 1 before being connected. Use this field if you pass the \`user.invite.callout\` value for the \`method\` field. - **`invitee_name`** `string` — The user's name to display in the session. Use this field if you pass the \`user.invite.callout\` value for the \`method\` field. - **`participant_uuid`** `string` — The user's UUID. This value is assigned to a user upon joining a session and is only valid for the session's duration. Use this field if you pass the \`audio.block\`, \`audio.unblock\`, \`video.block\`, \`video.unblock\`, \`share.block\`, \`share.unblock\`, or \`user.remove\` value for the \`method\` field. - **`phone_number`** `string` — The user's phone number. Use this field if you pass the \`user.invite.callout\` value for the \`method\` field. As a best practice, ensure this includes a country code and area code. If you are dialing a phone number that includes an extension, type a hyphen '-' after the phone number and enter the extension. For example, 6032331333-156 dials the extension 156. - **`sip_headers`** `object` — Enable customers to leverage services that require customization of the FROM header to identify the caller. Use this field if you pass the \`user.invite.room\_system\_callout\` value for the \`method\` field and the \`sip\` value for the \`call\_type\` field. - **`additional_headers`** `array` — Ability to add 1..10 custom headers, each of which has a maximum length of 256 bytes to comply with SIP standards. Custom headers would leverage header names starting with \"X-\" per SIP guidelines. **Items:** - **`key`** `string` — Additional custom SIP header's key - **`value`** `string` — Additional custom SIP header's value - **`from_display_name`** `string` — Custom name that will be used within the SIP Header. - **`from_uri`** `string` — Custom URI that will be used within the SIP Header. The URI must be start with 'sip:' or 'sips:' as a valid URI based on parameters defined by the platform - **`to_display_name`** `string` — Custom remote name that will be used within the session. - **`stream_ingestion_stream_id`** `string` — The stream ingestion ID. Use this field if you pass the \`stream\_ingestion.bind\`, \`stream\_ingestion.unbind\`, \`stream\_ingestion.send\`, or \`stream\_ingestion.stop\` value for the \`method\` field. **Example:** ```json { "method": "recording.start", "params": { "invitee_name": "Jill Chill", "phone_number": "15555550100", "invite_options": { "require_greeting": true, "require_pressing_one": true }, "call_type": "h323", "device_ip": "10.100.111.237", "h323_headers": { "from_display_name": "display name", "to_display_name": "display name" }, "sip_headers": { "from_display_name": "display name", "to_display_name": "display name", "from_uri": "sip:username@domain.company.org", "additional_headers": [ { "key": "X-Header1", "value": "X-body1" } ] }, "participant_uuid": "D444CD06-2ABB-2FCC-019B-39E41D8DADF7", "stream_ingestion_stream_id": "sfk/aOFJSJSYhGwk1hnxgw==" } } ``` #### Responses ##### Status: 202 \*\*HTTP Status Code\*\*: \`202\` Request processed successfully. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`300\` \
No permission. \
\*\*Error Code:\*\* \`300\` \
This API is not available for this account, please contact Zoom support. \
\*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
\*\*Error Code:\*\* \`34005\` \
This stream key is already bound to an existing session. Please use a different stream key. \
\*\*Error Code:\*\* \`34007\` \
Failed to bind a stream key to the session. \
\*\*Error Code:\*\* \`34008\` \
Failed to unbind a stream key to the session. \
\*\*Error Code:\*\* \`34009\` \
Failed to send ingested stream data into the session. \
\*\*Error Code:\*\* \`34010\` \
Failed to stop sending ingested stream data into the session. \
\*\*Error Code:\*\* \`34000\` \
Stream ingestion does not exist: {streamId}. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3001\` \
Session is not found or has expired. \
##### 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 session live stream details - **Method:** `GET` - **Path:** `/videosdk/sessions/{sessionId}/livestream` - **Tags:** Sessions Use this API to return a session's live stream configuration details, such as the stream's URL, key, and page URL. **Prerequisites:** - A Video SDK account **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Light` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` \*\*OK\*\* Live Stream details returned. ###### Content-Type: application/json - **`page_url`** `string`, format: `url` — The live stream's page URL. This is the URL at which anyone can view the session's live stream. - **`resolution`** `string` — The number of pixels in each dimension that the video camera can display. - **`stream_key`** `string` — The live stream key. - **`stream_url`** `string`, format: `url` — The live stream's URL. **Example:** ```json { "stream_url": "https://example.com/livestream", "stream_key": "ABCDEFG12345HIJ6789", "page_url": "https://example.com/livestream/123", "resolution": "720p" } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts.\
\*\*Error Code:\*\* \`300\` \
Session ID does not exist.\
\*\*Error Code:\*\* \`300\` \
Invalid session ID. ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3001\` \
Session does not exist: {sessionId}.\
\*\*Error Code:\*\* \`1001\` \
User does not exist: {0}. ##### 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 session live stream - **Method:** `PATCH` - **Path:** `/videosdk/sessions/{sessionId}/livestream` - **Tags:** Sessions Use this API to update a session's live stream information. **Prerequisites:** - A Video SDK account **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Light` #### Request Body ##### Content-Type: application/json - **`page_url` (required)** `string`, format: `url` — The live stream's page URL. This is the URL at which anyone can view the session's live stream. - **`stream_key` (required)** `string` — The live stream key. - **`stream_url` (required)** `string`, format: `url` — The live stream's URL. - **`resolution`** `string` — The number of pixels in each dimension that the video camera can display, required when a user enables 1080p. Use a value of \`720p\` or \`1080p\` **Example:** ```json { "stream_url": "https://example.com/livestream", "stream_key": "ABCDEFG12345HIJ6789", "page_url": "https://example.com/livestream/123", "resolution": "720p" } ``` #### Responses ##### Status: 204 \*\*HTTP Status Code:\*\* \`204\` Session live stream updated. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts.\
\*\*Error Code:\*\* \`300\` \
Session ID does not exist.\
\*\*Error Code:\*\* \`300\` \
Invalid session ID. ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3001\` \
Session does not exist: {sessionId}.\
\*\*Error Code:\*\* \`1001\` \
User does not exist: {0}. ##### 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 session livestream status - **Method:** `PATCH` - **Path:** `/videosdk/sessions/{sessionId}/livestream/status` - **Tags:** Sessions Update a session's livestream status. **Prerequisites:** - A Video SDK account **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` #### Request Body ##### Content-Type: application/json - **`action`** `string`, possible values: `"start", "stop", "mode"` — The session's livestream status: \* \`start\` - Start a livestream. \* \`stop\` - Stop an ongoing livestream. \* \`mode\` - Control a livestream view at runtime. - **`settings`** `object` — The session's livestreaming settings. - **`active_speaker_name`** `boolean` — Whether to display the name of the active speaker during a session's livestream. Use this field if you pass the \`start\` value for the \`action\` field. - **`close_caption`** `string`, possible values: `"burnt-in", "embedded", "off"`, default: `"burnt-in"` — The closed caption type of the session's livestream. Use this field if you pass the \`start\` or \`mode\` value for the \`action\` field. \* \`burnt-in\` - Burnt-In Captions. \* \`embedded\` - Embedded Captions. \* \`off\` - Turn off Captions. - **`display_name`** `string` — The display name of the session's livestream. Use this field if you pass the \`start\` value for the \`action\` field. - **`layout`** `string`, possible values: `"gallery_view", "speaker_view"`, default: `"speaker_view"` — The layout of the session's livestream. Use this field if you pass the \`start\` or \`mode\` value for the \`action\` field. \* \`gallery\_view\` - Gallery view. \* \`speaker\_view\` - Speaker view. **Example:** ```json { "action": "start", "settings": { "active_speaker_name": true, "display_name": "Jill Chill", "layout": "speaker_view", "close_caption": "burnt-in" } } ``` #### Responses ##### Status: 204 \*\*HTTP Status Code:\*\* \`204\` \
Session livestream updated. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
\*\*Error Code:\*\* \`300\` \
Invalid session ID. \
\*\*Error Code:\*\* \`4927\` \
Session {sessionId} has not started. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3001\` \
Session does not exist: {sessionId}. \
##### 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 Realtime Media Streams (RTMS) app status - **Method:** `PATCH` - **Path:** `/videosdk/sessions/{sessionId}/rtms_app/status` - **Tags:** Sessions Update the status of the Realtime Media Streams (RTMS) app in an ongoing session. Zoom lets individuals control their own RTMS during a session. **Prerequisites:** - A Video SDK account. - Contact [Developer Support](https://developers.zoom.us/support/) to enable RTMS features. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` #### Request Body ##### Content-Type: application/json - **`action` (required)** `string`, possible values: `"start", "stop", "pause", "resume"` — The RTMS app operation to apply in the session. \* \`start\` - Start an RTMS app. \* \`stop\` - Stop an ongoing RTMS app. \* \`pause\` - Pause an ongoing RTMS app. \* \`resume\` - Resume a previously paused RTMS app. **Example:** ```json { "action": "start" } ``` #### Responses ##### Status: 204 \*\*HTTP Status Code:\*\* \`204\` RTMS app status update request accepted and will be processed asynchronously. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
\*\*Error Code:\*\* \`300\` \
Invalid session ID. \
\*\*Error Code:\*\* \`2310\` \
Failed to perform RTMS app operation. \
\*\*Error Code:\*\* \`13277\` \
Unable to '{action}' the RTMS app for user '{userId}' because it has not been started. \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`13273\` \
The current session does not support the RTMS app feature. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3001\` \
Session does not exist: {sessionId}. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Get a session SIP URI with passcode - **Method:** `POST` - **Path:** `/videosdk/sessions/{sessionId}/sip_dialing` - **Tags:** Sessions Get a live video SDK session's SIP URI. The URI consists of the Video session ID, and may include the user-supplied passcode and participant identifier code. The API return data also includes additional fields to indicate whether the API caller has a valid Cloud Room Connector subscription, the participant identifier code from the URI, and the SIP URI validity period in seconds. **Prerequisites**: - The SIP URI is valid for 2 hours, or 7200 seconds, by default. After this period, the URI will expire and the API must be called again to retrieve a new one. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` #### Request Body ##### Content-Type: application/json - **`passcode`** `string` — If customers desire that a passcode be embedded in the SIP URI dial string, they must supply the passcode. Zoom will not validate the passcode. **Example:** ```json { "passcode": "123456" } ``` #### Responses ##### Status: 201 \*\*HTTP Status Code:\*\* \`201\` Session's encoded SIP URI returned. ###### Content-Type: application/json - **`expire_in`** `integer`, format: `int64` — The number of seconds the encoded SIP URI is valid before it expires. - **`participant_identifier_code`** `string` — This value identifies the session participant, which is automatically embedded in the SIP URI. - **`sip_dialing`** `string` — The session's encoded SIP URI. **Example:** ```json { "sip_dialing": "9678722567.xxxx....30qonrvgy@zoomcrc.com", "participant_identifier_code": "30qonrvgy", "expire_in": 7200 } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`2307\` \
Failed to generate SIP URI. \
##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden \*\*Error Code:\*\* \`2311\` \
No Permission, does not have Conference Room Connector plan. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3001\` \
Session does not exist: {sessionId}. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(/docs/api/rate-limits/). ### Update session status - **Method:** `PUT` - **Path:** `/videosdk/sessions/{sessionId}/status` - **Tags:** Sessions Use this API to update a session's status. **Prerequisites:** - A Video SDK account **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `Light` #### Request Body ##### Content-Type: application/json - **`action`** `string`, possible values: `"end"` — The session's type: \* \`end\` \— End the session. **Example:** ```json { "action": "end" } ``` #### Responses ##### Status: 204 \*\*HTTP Status Code:\*\* \`204\` Session updated. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts.\
\*\*Error Code:\*\* \`300\` \
Session ID does not exist.\
\*\*Error Code:\*\* \`300\` \
Invalid session ID. ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3001\` \
Session does not exist: {sessionId}.\
\*\*Error Code:\*\* \`1001\` \
User does not exist: {0}. ##### 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 session streaming ingestions - **Method:** `GET` - **Path:** `/videosdk/sessions/{sessionId}/stream_ingestions` - **Tags:** Sessions List all streaming ingestions of a live session. **Prerequisites:** - A Video SDK account. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` Session streaming ingestions returned. ###### Content-Type: application/json **Array of:** - **`rtmp_connection_status`** `integer`, possible values: `0, 1` — The RTMP connection status. \* \`0\` - Third-party live streaming software disconnected. \* \`1\` - Third-party live streaming software connected. - **`rtmp_stream_push_status`** `integer`, possible values: `0, 1` — The RTMP stream push status. \* \`0\` - The stream is not pushed to the live session. \* \`1\` - The stream has been pushed to the live session. - **`stream_id`** `string` — The stream ingestion ID. **Example:** ```json [ { "stream_id": "sfk/aOFJSJSYhGwk1hnxgw==", "rtmp_connection_status": 0, "rtmp_stream_push_status": 0 } ] ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
\*\*Error Code:\*\* \`300\` \
Invalid session ID. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3001\` \
Session does not exist: {sessionId}. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### List session users - **Method:** `GET` - **Path:** `/videosdk/sessions/{sessionId}/users` - **Tags:** Sessions Use this API to return a list of users from live or past sessions. You can specify a monthly date range for this data using the `from` and `to` query parameters. The month should fall within the last six months. - If you do **not** provide the `type` query parameter, the API defaults to the `live` value and the API will only return metrics for users in a live session, if a session is currently in progress. - To view metrics on past session users, provide the `past` value for the `type` query parameter. **Prerequisites:** - A Video SDK account. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `HEAVY` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` Session users returned. ###### Content-Type: application/json - **`next_page_token`** `string` — The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes. - **`page_size`** `integer`, default: `30` — The number of records returned within a single API call. - **`users`** `array` — Information about session users. \*\*Note:\*\* \* If a user left a session and rejoined the same session, their information will appear multiple times (for each time the user joined the session). **Items:** - **`audio_call`** `array` — Information about the meeting participant's audio call. Some participants may join the meeting through a phone call or are bound to the audio from a phone call. **Items:** - **`call_number`** `string` — The caller's number. - **`call_type`** `string` — The call type. - **`zoom_number`** `string` — The toll-free telephone number. - **`audio_quality`** `string`, possible values: `"good", "fair", "poor", "bad"` — \* \`good\` - The audio is almost flawless and the quality is excellent. \* \`fair\` - The audio occasionally has distortion, noise, and other problems, but the content is basically continuous. Users can communicate normally. \* \`poor\` - The audio often has distortion, noise, and other problems, but the content is basically continuous. Users can communicate normally. \* \`bad\` - The sound quality is extremely poor and the audio content is almost inaudible. - **`browser_name`** `string` — Web client browser - **`browser_version`** `string` — Web client browser version - **`camera`** `string` — The type of camera that the user used during the session. - **`client`** `string` — Client software or SDK version. - **`connection_type`** `string` — The user's connection type. - **`data_center`** `string` — The data center where user's session data is stored. See \[Datacenter abbreviation list]\(https\://support.zoom.us/hc/en-us/articles/360059254691-Datacenter-abbreviation-list) for details. - **`device`** `string`, possible values: `"Phone", "H.323/SIP", "Windows", "Mac", "iOS", "Android"` — The type of device the user used to join the session: \* \`Phone\` - The user joined via PSTN. \* \`H.323/SIP\` - The user joined via an H.323 or SIP device. \* \`Windows\` - The user joined via VoIP using a Windows device. \* \`Mac\` - The user joined via VoIP using a Mac device. \* \`iOS\` - The user joined via VoIP using an iOS device. \* \`Android\` - The user joined via VoIP using an Android device. - **`id`** `string` — The user's ID. This is a unique ID assigned to the user joining a session and is valid for \*\*only\*\* that session. - **`ip_address`** `string` — The user's IP address. - **`is_original_host`** `boolean` — Whether the current user is the original host of this session. - **`join_time`** `string`, format: `date-time` — The time at which user joined the session. - **`leave_time`** `string`, format: `date-time` — The time at which a user left the session. For live sessions, this field is only returned if a user has left the ongoing session. - **`location`** `string` — The user's location. - **`microphone`** `string` — The type of microphone that the user used during the session. - **`name`** `string` — The user's display name. - **`network_type`** `string`, possible values: `"Wired", "Wifi", "PPP", "Cellular", "Others"` — The user's network type: \* \`Wired\` \* \`Wifi\` \* \`PPP\` - Point-to-Point. \* \`Cellular\` - 3G, 4G, and 5G cellular. \* \`Others\` - Not able to detect network type on web browsers. - **`os`** `string` — Device operating system - **`os_version`** `string` — Device operating system version - **`participant_uuid`** `string` — The participant's UUID. This value is assigned to a participant upon joining a session and is only valid for the session's duration. - **`screen_share_quality`** `string`, possible values: `"good", "fair", "poor", "bad"` — \* \`good\` - The video is almost flawless and the quality is excellent. \* \`fair\` - The video definition is high, occasionally gets stuck, fast or slow, or other problems, but the frequency is very low and the video quality is good. \* \`poor\` - The video definition is not high, but not many problems exist. The video quality is mediocre. \* \`bad\` - The picture is very blurred and often gets stuck. - **`speaker`** `string` — The type of speaker that the user used during the session. - **`user_key`** `string` — Another identifier for the user. Set with the \`user\_identity\` key in the Video SDK JWT payload. Can be a number or characters. Maximum length of 36 characters. - **`video_quality`** `string`, possible values: `"good", "fair", "poor", "bad"` — \* \`good\` - The video is almost flawless and the quality is excellent. \* \`fair\` - The video definition is high, occasionally gets stuck, fast or slow, or other problems, but the frequency is very low and the video quality is good. \* \`poor\` - The video definition is not high, but not many problems exist. The video quality is mediocre. \* \`bad\` - The picture is very blurred and often gets stuck. **Example:** ```json { "page_size": 30, "next_page_token": "suQA5LvDBnH5No5OYD7mqpJuFzJqUOHK8U2", "users": [ { "id": "32dsfsd4g5gd", "name": "exampleuser", "device": "Windows", "ip_address": "127.0.0.1", "location": "New York", "network_type": "Wifi", "microphone": "Plantronics BT600", "speaker": "Plantronics BT600", "camera": "FaceTime HD Camera", "data_center": "SC", "connection_type": "P2P", "join_time": "2019-08-20T19:09:01Z", "leave_time": "2019-08-20T19:19:01Z", "user_key": "myUserKey", "audio_call": [ { "call_number": "4131", "call_type": "call-in", "zoom_number": "18773690926" } ], "participant_uuid": "D444CD06-2ABB-2FCC-019B-39E41D8DADF7", "client": "Web Meeting SDK 2.18", "os": "iOS", "os_version": "16.5", "browser_name": "Firefox", "browser_version": "133", "audio_quality": "good", "video_quality": "good", "screen_share_quality": "good", "is_original_host": false } ] } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
\*\*Error Code:\*\* \`12702\` \
Can not access a session a year ago. \
##### Status: 401 \*\*HTTP Status Code:\*\* \`401\` \
Unauthorized ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3001\` \
Session ID is invalid or has not ended. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### List session users QoS - **Method:** `GET` - **Path:** `/videosdk/sessions/{sessionId}/users/qos` - **Tags:** Sessions Return a list of session users from live or past sessions along with the quality of service (QoS) they received during the session. For example, connection quality for sending and receiving video, audio, and shared content. You can specify a monthly date range for the dashboard data using the `from` and `to` query parameters. The month should fall within the last six months. - If you do **not** provide the `type` query parameter, the API defaults to the `live` value and the API will only return metrics for users in a live session, if a session is currently in progress. - To view metrics on past session users, provide the `past` value for the `type` query parameter. **Prerequisites:** - A Video SDK Account **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `HEAVY` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` Session users returned. ###### Content-Type: application/json - **`next_page_token`** `string` — The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceed the current page size. The expiration period for this token is 15 minutes. - **`page_size`** `integer`, default: `1` — The number of items per page. - **`users`** `array` — Information about the session users. **Items:** - **`browser_name`** `string` — Web client browser. - **`browser_version`** `string` — Web client browser version. - **`camera`** `string` — The type of camera used during the session. - **`client`** `string` — Client software or SDK version. - **`connection_type`** `string` — The user's connection type. - **`data_center`** `string` — The data center where the user's session data is stored. See \[Datacenter abbreviation list]\(https\://support.zoom.com/hc/en/article?id=zm\_kb\&sysparm\_article=KB0067446) for details. - **`device`** `string`, possible values: `"Phone", "H.323/SIP", "Windows", "Mac", "iOS", "Android"` — The type of device used to join the session: \* \`Phone\` - The user joined with PSTN. \* \`H.323/SIP\` - The user joined with an H.323 or SIP device. \* \`Windows\` - The user joined with VoIP on a Windows device. \* \`Mac\` - The user joined with VoIP on a macOS device. \* \`iOS\` - The user joined with VoIP on an iOS device. \* \`Android\` - The user joined with VoIP on an Android device. \* \`""\` - An external user. - **`id`** `string` — The user's ID. - **`ip_address`** `string` — The user's IP address. - **`is_original_host`** `boolean` — Whether the current user is the original host of this session. - **`join_time`** `string`, format: `date-time` — The time at which user joined the session. - **`leave_time`** `string`, format: `date-time` — The time at which user left the session. - **`location`** `string` — The user's location. - **`microphone`** `string` — The type of microphone used during the session. - **`name`** `string` — The user's display name. - **`network_type`** `string`, possible values: `"Wired", "Wifi", "PPP", "Cellular", "Others"` — The user's network type: \* \`Wired\` \* \`Wifi\` \* \`PPP\` - Point-to-Point. \* \`Cellular\` - 3G, 4G, and 5G cellular. \* \`Others\` - An unknown device. - **`os`** `string` — Device operating system. - **`os_version`** `string` — Device operating system version. - **`speaker`** `string` — The type of speaker used during the session. - **`user_key`** `string` — Another identifier for the user. Set with the user\_identity key in the Video SDK JWT payload. Can be a number or characters. Maximum length of 36 characters. - **`user_qos`** `array` — The QoS (quality of service) provided to the user. **Items:** - **`as_device_from_rwg`** `object` — Information about the session's screen share QoS (quality of service) sent by a participant who joined the meeting via the web client. - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`frame_rate`** `string` — The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30fps. - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`resolution`** `string` — The number of pixels in each dimension that can be displayed by your video camera. - **`as_device_to_rwg`** `object` — Information about the session's screen share QoS (quality of service) received by a participant who joined the meeting via the web client. - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`frame_rate`** `string` — The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30fps. - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`resolution`** `string` — The number of pixels in each dimension that can be displayed by your video camera. - **`as_input`** `object` — Information about the session's screen share QoS (quality of service). - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`frame_rate`** `string` — The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30fps. - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`resolution`** `string` — The number of pixels in each dimension that can be displayed by your video camera. - **`as_output`** `object` — Information about the session's screen share QoS (quality of service). - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`frame_rate`** `string` — The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30fps. - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`resolution`** `string` — The number of pixels in each dimension that can be displayed by your video camera. - **`audio_device_from_rwg`** `object` — Information about the session's audio quality of service (QoS) sent by a participant who joined the meeting via the web client. - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`audio_device_to_rwg`** `object` — Information about the session's audio quality of service (QoS) received by a participant who joined the meeting via the web client. - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`audio_input`** `object` — Information about the session's audio quality of service (QoS). - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`audio_output`** `object` — Information about the session's audio quality of service (QoS). - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`cpu_pressure_level`** `object` — The CPU pressure level of the system. - **`system_avg_cpu_pressure_level`** `string`, possible values: `"normal", "fair", "serious", "critical"` — The average CPU pressure level of the system. - **`system_max_cpu_pressure_level`** `string`, possible values: `"critical", "serious", "fair", "normal"` — The maximum CPU pressure level of the system. - **`system_min_cpu_pressure_level`** `string`, possible values: `"normal", "fair", "serious", "critical"` — The minimum CPU pressure level of the system. - **`cpu_usage`** `object` — Information about CPU usage. - **`system_max_cpu_usage`** `string` — The system's maximum CPU usage. - **`zoom_avg_cpu_usage`** `string` — Zoom's average CPU usage. - **`zoom_max_cpu_usage`** `string` — Zoom's maximum CPU usage. - **`zoom_min_cpu_usage`** `string` — Zoom's minimum CPU usage. - **`date_time`** `string`, format: `date-time` — The QoS date. - **`video_device_from_rwg`** `object` — Information about the session's video quality of service (QoS) sent by a participant who joined the meeting via the web client. - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`frame_rate`** `string` — The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30 fps. - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`resolution`** `string` — The number of pixels in each dimension that can be displayed by your video camera. - **`video_device_to_rwg`** `object` — Information about the session's video quality of service (QoS) received by a participant who joined the meeting via the web client. - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`frame_rate`** `string` — The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30 fps. - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`resolution`** `string` — The number of pixels in each dimension that can be displayed by your video camera. - **`video_input`** `object` — Information about the session's video quality of service (QoS). - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`frame_rate`** `string` — The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30 fps. - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`resolution`** `string` — The number of pixels in each dimension that can be displayed by your video camera. - **`video_output`** `object` — Information about the session's video quality of service (QoS). - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`frame_rate`** `string` — The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30 fps. - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`resolution`** `string` — The number of pixels in each dimension that can be displayed by your video camera. - **`wifi_rssi`** `object` — The QoS metrics for the wireless network's RSSI sent by a participant who joined the meeting through a wireless network. - **`avg_rssi`** `integer` — Average value of the wireless network's received signal strength indicator (RSSI). - **`max_rssi`** `integer` — Maximum value of the wireless network's received signal strength indicator (RSSI). - **`min_rssi`** `integer` — Minimum value of the wireless network's received signal strength indicator (RSSI). - **`rssi_unit`** `string` — Unit of the wireless network's received signal strength indicator (RSSI). **Example:** ```json { "page_size": 1, "next_page_token": "1cyhUewZa419P9F8QUYURck0U3rFWB0d1H2", "users": [ { "id": "1670000000", "name": "User", "device": "Android", "client": "Web Meeting SDK 2.18", "os": "iOS", "os_version": "16.5", "browser_name": "Firefox", "browser_version": "133", "ip_address": "192.0.2.0", "location": "San Jose (US)", "network_type": "Wifi", "microphone": "Plantronics BT600", "speaker": "Plantronics BT600", "camera": "FaceTime HD Camera", "data_center": "SC", "connection_type": "P2P", "join_time": "2019-08-20T19:09:01Z", "leave_time": "2019-08-20T19:19:01Z", "user_key": "myUserKey", "is_original_host": false, "user_qos": [ { "date_time": "2019-08-20T19:19:01Z", "audio_input": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%" }, "audio_output": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%" }, "video_input": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%", "resolution": "1280*720", "frame_rate": "12 fps" }, "video_output": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%", "resolution": "1280*720", "frame_rate": "12 fps" }, "as_input": { "bitrate": "23 Kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%", "resolution": "1280*720", "frame_rate": "12 fps" }, "as_output": { "bitrate": "23 Kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%", "resolution": "1280*720", "frame_rate": "12 fps" }, "audio_device_from_rwg": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%" }, "audio_device_to_rwg": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%" }, "video_device_from_rwg": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%", "resolution": "1280*720", "frame_rate": "12 fps" }, "video_device_to_rwg": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%", "resolution": "1280*720", "frame_rate": "12 fps" }, "as_device_from_rwg": { "bitrate": "23 Kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%", "resolution": "1280*720", "frame_rate": "12 fps" }, "as_device_to_rwg": { "bitrate": "23 Kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%", "resolution": "1280*720", "frame_rate": "12 fps" }, "wifi_rssi": { "max_rssi": -75, "avg_rssi": -69, "min_rssi": -35, "rssi_unit": "dBm" }, "cpu_usage": { "zoom_min_cpu_usage": "8%", "zoom_avg_cpu_usage": "12%", "zoom_max_cpu_usage": "18%", "system_max_cpu_usage": "40%" }, "cpu_pressure_level": { "system_min_cpu_pressure_level": "normal", "system_avg_cpu_pressure_level": "normal", "system_max_cpu_pressure_level": "normal" } } ] } ] } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
\*\*Error Code:\*\* \`12702\` \
Can not access a session a year ago. \
##### Status: 401 \*\*HTTP Status Code:\*\* \`401\` \
Unauthorized ##### Status: 403 \*\*HTTP Status Code:\*\* \`403\` \
Forbidden ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3001\` \
This session's detail info is not available.\
The Session ID is not valid or the session has not ended yet. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Get sharing/recording details - **Method:** `GET` - **Path:** `/videosdk/sessions/{sessionId}/users/sharing` - **Tags:** Sessions Retrieve the sharing and recording details of participants from live or past sessions. **Prerequisites:** - A Video SDK Account. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `HEAVY` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` Session user share returned. ###### Content-Type: application/json - **`next_page_token`** `string` — The next page token is used to paginate through large result sets. A next page token will be returned whenever the set of available results exceed the current page size. The expiration period for this token is 15 minutes. - **`page_size`** `integer`, default: `1` — The number of items per page. - **`users`** `array` — Array of users **Items:** - **`details`** `array` — Array of users **Items:** - **`content`** `string`, possible values: `"local_recording", "cloud_recording", "desktop", "application", "whiteboard", "airplay", "camera", "video_sdk"` — Type of content shared. - **`end_time`** `string` — End time of sharing. - **`start_time`** `string` — Start time of sharing. - **`id`** `string` — The user's ID. - **`name`** `string` — The user's display name. - **`user_key`** `string` — Another identifier for the user. Set with the user\_identity key in the Video SDK JWT payload. Can be a number or characters. Maximum length of 36 characters. **Example:** ```json { "page_size": 1, "next_page_token": "1cyhUewZa419P9F8QUYURck0U3rFWB0d1H2", "users": [ { "id": "1670000000", "name": "User", "user_key": "myUserKey", "details": [ { "content": "desktop", "start_time": "2021-06-17T06:49:06Z", "end_time": "2021-06-17T06:49:35Z" } ] } ] } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
\*\*Error Code:\*\* \`12702\` \
Can not access a session a year ago. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3001\` \
This session's detail info is not available.\
This session has not ended yet or the Session ID is invalid. \
##### 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 session user QoS - **Method:** `GET` - **Path:** `/videosdk/sessions/{sessionId}/users/{userId}/qos` - **Tags:** Sessions Retrieve the quality of service (QoS) for users from live or past sessions. The data returned indicates the connection quality for sending and receiving video, audio, and shared content. For a session that has started and is ongoing, the API returns live session data. If the session has ended, the API returns the past session data. - This API will **not** return data if there is no data being sent or received at the time of request. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `HEAVY` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` Session user QOS returned. ###### Content-Type: application/json - **`browser_name`** `string` — Web client browser name. - **`browser_version`** `string` — Web client browser version. - **`camera`** `string` — The type of camera that the user used during the session. - **`client`** `string` — Client software or SDK version. - **`connection_type`** `string` — The user's connection type. - **`data_center`** `string` — The data center where user's session data is stored. See \[Datacenter abbreviation list]\(https\://support.zoom.us/hc/en-us/articles/360059254691-Datacenter-abbreviation-list) for details. - **`device`** `string`, possible values: `"Phone", "H.323/SIP", "Windows", "Mac", "iOS", "Android"` — The type of device used to join the session. \* \`Phone\` - The user joined via PSTN. \* \`H.323/SIP\` - The user joined via an H.323 or SIP device. \* \`Windows\` - The user joined via Voice over IP (VoIP) using a Windows device. \* \`Mac\` - The user joined via VoIP using a Mac device. \* \`iOS\` - The user joined via VoIP using an iOS device. \* \`Android\` - The user joined via VoIP using an Android device. \* \`""\` - An external user. - **`id`** `string` — The user's ID. - **`ip_address`** `string` — The user's IP address. - **`is_original_host`** `boolean` — Whether the current user is the original host of this session. - **`join_time`** `string`, format: `date-time` — The time at which the user joined the session. - **`leave_time`** `string`, format: `date-time` — The time at which the user left the session. - **`location`** `string` — The user's location. - **`microphone`** `string` — The type of microphone that the user used during the session. - **`name`** `string` — The user's display name. - **`network_type`** `string`, possible values: `"Wired", "Wifi", "PPP", "Cellular", "Others"` — The user's network type. \* \`Wired\` \* \`Wifi\` \* \`PPP\` - Point-to-Point. \* \`Cellular\` - 3G, 4G, and 5G cellular. \* \`Others\` - An unknown device. - **`os`** `string` — Device operation system. - **`os_version`** `string` — Device operation system version. - **`speaker`** `string` — The type of speaker that the user used during the session. - **`user_key`** `string` — Another identifier for the user. Set with the user\_identity key in the Video SDK JWT payload. Can be a number or characters. Maximum length of 36 characters. - **`user_qos`** `array` — The QoS (quality of service) provided to the user. **Items:** - **`as_device_from_rwg`** `object` — Information about the session's screen share QoS (quality of service) sent by a user who joined the session via the web client. - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`frame_rate`** `string` — The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30 frames per second (FPS). - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`resolution`** `string` — The number of pixels in each dimension that can be displayed by your video camera. - **`as_device_to_rwg`** `object` — Information about the session's screen share QoS (quality of service) received by a user who joined the session via the web client. - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`frame_rate`** `string` — The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30fps. - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`resolution`** `string` — The number of pixels in each dimension that can be displayed by your video camera. - **`as_input`** `object` — Information about the session's screen share QoS (quality of service). - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`frame_rate`** `string` — The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30 frames per second (FPS). - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`resolution`** `string` — The number of pixels in each dimension that can be displayed by your video camera. - **`as_output`** `object` — Information about the session's screen share QoS (quality of service). - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`frame_rate`** `string` — The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30 frames per second (FPS). - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`resolution`** `string` — The number of pixels in each dimension that can be displayed by your video camera. - **`audio_device_from_rwg`** `object` — Information about the session's audio quality of service (QoS) sent by a user who joined the session via the web client. - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`audio_device_to_rwg`** `object` — Information about the session's audio quality of service (QoS) received by a user who joined the session via the web client. - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`audio_input`** `object` — Information about the session's audio quality of service (QoS). - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`audio_output`** `object` — Information about the session's audio quality of service (QoS). - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`cpu_pressure_level`** `object` — The CPU pressure level of the system. - **`system_avg_cpu_pressure_level`** `string`, possible values: `"normal", "fair", "serious", "critical"` — The average CPU pressure level of the system. - **`system_max_cpu_pressure_level`** `string`, possible values: `"critical", "serious", "fair", "normal"` — The maximum CPU pressure level of the system. - **`system_min_cpu_pressure_level`** `string`, possible values: `"normal", "fair", "serious", "critical"` — The minimum CPU pressure level of the system. - **`cpu_usage`** `object` — Information about CPU usage. - **`system_max_cpu_usage`** `string` — The system's maximum CPU usage. - **`zoom_avg_cpu_usage`** `string` — Zoom's average CPU usage. - **`zoom_max_cpu_usage`** `string` — Zoom's maximum CPU usage. - **`zoom_min_cpu_usage`** `string` — Zoom's minimum CPU usage. - **`date_time`** `string`, format: `date-time` — The QoS date. - **`video_device_from_rwg`** `object` — Information about the session's video quality of service (QoS) sent by a user who joined the session via the web client. - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`frame_rate`** `string` — The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30 frames per second (FPS). - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`resolution`** `string` — The number of pixels in each dimension that can be displayed by your video camera. - **`video_device_to_rwg`** `object` — Information about the session's video quality of service (QoS) received by a user who joined the session via the web client. - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`frame_rate`** `string` — The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30 frames per second (FPS). - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`resolution`** `string` — The number of pixels in each dimension that can be displayed by your video camera. - **`video_input`** `object` — Information about the session's video quality of service (QoS). - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`frame_rate`** `string` — The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30 frames per second (FPS). - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`resolution`** `string` — The number of pixels in each dimension that can be displayed by your video camera. - **`video_output`** `object` — Information about the session's video quality of service (QoS). - **`avg_loss`** `string` — The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination. - **`bitrate`** `string` — The number of bits per second that can be transmitted along a digital network, in Kbps. - **`frame_rate`** `string` — The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30 frames per second (FPS). - **`jitter`** `string` — The variation in the delay of received packets, in milliseconds. - **`latency`** `string` — The time it takes for a packet to travel from point to point, in milliseconds. - **`max_loss`** `string` — The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination. - **`resolution`** `string` — The number of pixels in each dimension that can be displayed by your video camera. - **`wifi_rssi`** `object` — The QoS metrics for the wireless network's RSSI sent by a participant who joined the meeting through a wireless network. - **`avg_rssi`** `integer` — Average value of the wireless network's received signal strength indicator (RSSI). - **`max_rssi`** `integer` — Maximum value of the wireless network's received signal strength indicator (RSSI). - **`min_rssi`** `integer` — Minimum value of the wireless network's received signal strength indicator (RSSI). - **`rssi_unit`** `string` — Unit of the wireless network's received signal strength indicator (RSSI). **Example:** ```json { "id": "1670000000", "name": "User", "device": "Android", "os": "iOS", "os_version": "16.5", "browser_name": "Firefox", "browser_version": "133", "client": "Web Meeting SDK 2.18", "ip_address": "192.0.2.0", "location": "San Jose (US)", "network_type": "Wifi", "microphone": "Plantronics BT600", "speaker": "Plantronics BT600", "camera": "FaceTime HD Camera", "data_center": "SC", "connection_type": "P2P", "join_time": "2019-08-20T19:09:01Z", "leave_time": "2019-08-20T19:19:01Z", "user_key": "myUserKey", "is_original_host": false, "user_qos": [ { "date_time": "2019-08-20T19:19:01Z", "audio_input": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%" }, "audio_output": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%" }, "video_input": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%", "resolution": "1280*720", "frame_rate": "12 fps" }, "video_output": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%", "resolution": "1280*720", "frame_rate": "12 fps" }, "as_input": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%", "resolution": "1280*720", "frame_rate": "12 fps" }, "as_output": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%", "resolution": "1280*720", "frame_rate": "12 fps" }, "audio_device_from_rwg": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%" }, "audio_device_to_rwg": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%" }, "video_device_from_rwg": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%", "resolution": "1280*720", "frame_rate": "12 fps" }, "video_device_to_rwg": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%", "resolution": "1280*720", "frame_rate": "12 fps" }, "as_device_from_rwg": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%", "resolution": "1280*720", "frame_rate": "12 fps" }, "as_device_to_rwg": { "bitrate": "23 kbps", "latency": "126 ms", "jitter": "6 ms", "avg_loss": "0.3%", "max_loss": "1.9%", "resolution": "1280*720", "frame_rate": "12 fps" }, "wifi_rssi": { "max_rssi": -75, "avg_rssi": -69, "min_rssi": -35, "rssi_unit": "dBm" }, "cpu_usage": { "zoom_min_cpu_usage": "8%", "zoom_avg_cpu_usage": "12%", "zoom_max_cpu_usage": "18%", "system_max_cpu_usage": "40%" }, "cpu_pressure_level": { "system_min_cpu_pressure_level": "normal", "system_avg_cpu_pressure_level": "normal", "system_max_cpu_pressure_level": "normal" } } ] } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
\*\*Error Code:\*\* \`12702\` \
Can not access a session a year ago. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`3001\` \
This session's detail info is not available.\
This session has not ended yet or the Session ID is invalid. \
##### 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 stream ingestions - **Method:** `GET` - **Path:** `/videosdk/stream_ingestions` - **Tags:** Sessions List all the stream ingestions on your Zoom account. **Prerequisites:** - A Video SDK account. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` Stream ingestion list returned. ###### Content-Type: application/json - **`next_page_token`** `string` — The next page token paginates through a large set of results. A next page token returns whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes. - **`page_size`** `integer`, default: `30` — The number of records returned with a single API call. - **`stream_ingestions`** `array` — Stream ingestion list. **Items:** - **`backup_stream_url`** `string` — The backup stream URL. - **`stream_description`** `string` — The stream ingestion description. - **`stream_id`** `string` — The stream ingestion ID. - **`stream_key`** `string` — The stream ingestion key. - **`stream_name`** `string` — The stream ingestion name. - **`stream_url`** `string` — The stream URL. **Example:** ```json { "page_size": 30, "next_page_token": "Tva2CuIdTgsv8wAnhyAdU3m06Y2HuLQtlh3", "stream_ingestions": [ { "stream_id": "sfk/aOFJSJSYhGwk1hnxgw==", "stream_name": "stream ingestion1", "stream_description": "stream ingestion1", "stream_key": "ABCDEFG12345HIJ6789", "stream_url": "rtmp://a.rtmp.zoomevent.com/live1", "backup_stream_url": "rtmp://a.rtmp.zoomevent.com/live1" } ] } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
\*\*Error Code:\*\* \`34014\` \
Failed to list the stream ingestions. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Create a stream ingestion - **Method:** `POST` - **Path:** `/videosdk/stream_ingestions` - **Tags:** Sessions Create a stream ingestion. A stream ingestion is a unique identifier used to establish a connection between an external streaming source (such as a third-party live streaming app) and the Zoom streaming platform. Once you've created a stream ingestion, you can bind it to your video session, so you can integrate the video feeds from the streaming source into your live video session, for a more immersive experience. You can create up to 20 stream ingestions. **Prerequisites:** - A Video SDK account. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` #### Request Body ##### Content-Type: application/json - **`stream_name` (required)** `string` — The stream ingestion name. - **`stream_description`** `string` — The stream ingestion description. **Example:** ```json { "stream_name": "stream ingestion1", "stream_description": "stream ingestion1" } ``` #### Responses ##### Status: 201 \*\*HTTP Status Code:\*\* \`201\` Stream ingestion created. ###### Content-Type: application/json - **`backup_stream_url`** `string` — The backup stream URL. - **`stream_description`** `string` — The stream ingestion description. - **`stream_id`** `string` — The stream ingestion ID. - **`stream_key`** `string` — The stream ingestion key. - **`stream_name`** `string` — The stream ingestion name. - **`stream_url`** `string` — The stream URL. **Example:** ```json { "stream_id": "sfk/aOFJSJSYhGwk1hnxgw==", "stream_name": "stream ingestion1", "stream_description": "stream ingestion1", "stream_key": "ABCDEFG12345HIJ6789", "stream_url": "rtmp://a.rtmp.zoomevent.com/live1", "backup_stream_url": "rtmp://a.rtmp.zoomevent.com/live1" } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`34016\` \
You can only create up to 20 stream ingestions. \
\*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
\*\*Error Code:\*\* \`34011\` \
Failed to create the stream ingestion. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Get a stream ingestion - **Method:** `GET` - **Path:** `/videosdk/stream_ingestions/{streamId}` - **Tags:** Sessions Get information about a stream ingestion. **Prerequisites:** - A Video SDK account. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` Stream ingestion object returned. ###### Content-Type: application/json - **`backup_stream_url`** `string` — The backup stream URL. - **`stream_description`** `string` — The stream ingestion description. - **`stream_id`** `string` — The stream ingestion ID. - **`stream_key`** `string` — The stream ingestion key. - **`stream_name`** `string` — The stream ingestion name. - **`stream_url`** `string` — The stream URL. **Example:** ```json { "stream_id": "sfk/aOFJSJSYhGwk1hnxgw==", "stream_name": "stream ingestion1", "stream_description": "stream ingestion1", "stream_key": "ABCDEFG12345HIJ6789", "stream_url": "rtmp://a.rtmp.zoomevent.com/live1", "backup_stream_url": "rtmp://a.rtmp.zoomevent.com/live1" } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`34001\` \
Stream ingestion does not exist: {streamId}. \
##### 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 stream ingestion - **Method:** `DELETE` - **Path:** `/videosdk/stream_ingestions/{streamId}` - **Tags:** Sessions Delete a stream ingestion. **Prerequisites:** - A Video SDK account. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` #### Responses ##### Status: 204 \*\*HTTP Status Code:\*\* \`204\` Stream ingestion deleted. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
\*\*Error Code:\*\* \`34015\` \
You cannot delete a steam ingestion that is in use. \
\*\*Error Code:\*\* \`34012\` \
Failed to delete the stream ingestion. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`34001\` \
Stream ingestion does not exist: {streamId}. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Update a stream ingestion - **Method:** `PATCH` - **Path:** `/videosdk/stream_ingestions/{streamId}` - **Tags:** Sessions Update a stream ingestion. **Prerequisites:** - A Video SDK account. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `LIGHT` #### Request Body ##### Content-Type: application/json - **`stream_description`** `string` — The stream ingestion description. - **`stream_name`** `string` — The stream ingestion name. **Example:** ```json { "stream_name": "stream ingestion1", "stream_description": "stream ingestion1" } ``` #### Responses ##### Status: 204 \*\*HTTP Status Code:\*\* \`204\` Stream ingestion updated. ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
\*\*Error Code:\*\* \`34013\` \
Failed to update the stream ingestion. \
##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`34001\` \
Stream ingestion does not exist: {streamId}. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Get cloud recording usage report - **Method:** `GET` - **Path:** `/videosdk/report/cloud_recording` - **Tags:** Video SDK Reports Retrieve cloud recording usage report for a specified period. You can only get cloud recording reports for up to 6 months prior to the current date. The date gap between from and to dates should be smaller or equal to 30 days. **Prerequisites** - A Video SDK account. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `HEAVY` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` Clound recording report returned. ###### Content-Type: application/json - **`cloud_recording_storage`** `array` — Array of cloud usage objects. **Items:** - **`date`** `string`, format: `date` — Date of usage. - **`free_usage`** `string` — Free storage. - **`plan_usage`** `string` — Paid storage. - **`usage`** `string` — Storage used on the date. - **`from`** `string`, format: `date` — Start date for this report. - **`to`** `string`, format: `date` — End date for this report. **Example:** ```json { "from": "2021-12-01", "to": "2021-12-02", "cloud_recording_storage": [ { "date": "2021-12-01", "usage": "29 MB", "plan_usage": "1 GB", "free_usage": "1 GB" } ] } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`300\` \
Daily report can only be provided within 6 months prior to the current date. \
\*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
##### 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 daily usage report - **Method:** `GET` - **Path:** `/videosdk/report/daily` - **Tags:** Video SDK Reports Get daily report of the account-wide usage of Zoom services for each day in a given month. It lists the number of sessions, users, and session minutes. **Prerequisites** - A Video SDK account. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `HEAVY` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` Daily report retrieved. ###### Content-Type: application/json - **`dates`** `array` — Array of date objects. **Items:** - **`date`** `string`, format: `date` — Date for this object. - **`session_minutes`** `integer` — Number of session minutes on this date. - **`sessions`** `integer` — Number of sessions on this date. - **`users`** `integer` — Number of participants on this date. - **`month`** `integer` — Month for this report. - **`year`** `integer` — Year for this report. **Example:** ```json { "year": 2021, "month": 12, "dates": [ { "date": "2021-12-01", "sessions": 20, "users": 80, "session_minutes": 380 } ] } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`300\` \
Daily report can only be provided within 6 months prior to the current date. \
\*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Get operation logs report - **Method:** `GET` - **Path:** `/videosdk/report/operationlogs` - **Tags:** Video SDK Reports Get operation logs report for a specified period of time. The operations logs report allows you to audit admin and user activity, such as changing account settings, and deleting recordings. See [Using Admin Activity Logs](https://support.zoom.com/hc/en/article?id=zm_kb\&sysparm_article=KB0067251) for similar usage in Zoom Meetings. **Prerequisites** - A Video SDK account. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `HEAVY` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` Operation Logs Report Returned. ###### Content-Type: application/json - **`from`** `string`, format: `date` — Start date for this report. - **`next_page_token`** `string` — Use the next page token to paginate through large result sets. Zoom returns a next page token whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes. - **`operation_logs`** `array` — Array of operation log objects **Items:** - **`action`** `string` — Action taken. - **`category_type`** `string` — Category type. - **`operation_detail`** `string` — Operation detail. - **`operator`** `string` — The user who performed the operation. - **`time`** `string`, format: `date-time` — The time when the operation was performed. - **`page_size`** `integer`, default: `30` — The number of records returned within a single API call. - **`to`** `string`, format: `date` — End date for this report. **Example:** ```json { "page_size": 30, "next_page_token": "suQA5LvDBnH5No5OYD7mqpJuFzJqUOHK8U2", "from": "2021-12-01", "to": "2021-12-02", "operation_logs": [ { "time": "2019-08-20T19:09:01Z", "operator": "someuser@sfksfhksdfsf.com", "category_type": "User", "action": "update", "operation_detail": "Activate User sjkfhdsf@jdfgkhgd.com" } ] } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`300\` \
Daily report can only be provided within 6 months prior to the current date. \
\*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Get telephone report - **Method:** `GET` - **Path:** `/videosdk/report/telephone` - **Tags:** Video SDK Reports Get the telephone report for a specified period of time. The telephone report allows you to view who dialed into sessions via phone (Audio Conferencing or SIP Connected Audio), which number they dialed into, and other details. See [Accessing audio conferencing reports](https://support.zoom.us/hc/en-us/articles/206514816-Telephone-reports) for similar usage in Zoom Meetings. **Prerequisites** - A Video SDK account. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `HEAVY` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` Telephone report returned. ###### Content-Type: application/json - **`from`** `string`, format: `date` — Start date for this report. - **`next_page_token`** `string` — Use the next page token to paginate through large result sets. Zoom returns a next page token whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes. - **`page_size`** `integer`, default: `30` — The number of records returned within a single API call. - **`telephony_usage`** `array` — Array of telephony objects. **Items:** - **`call_in_number`** `string` — Caller's call-in number. - **`country_name`** `string` — Country name. - **`duration`** `integer` — Call leg duration. - **`end_time`** `string`, format: `date-time` — Call leg end time. - **`phone_number`** `string` — Toll-free telephone number. - **`rate`** `number` — Calling rate for the telephone call. - **`session_id`** `string` — The session's ID. If the ID begins with a \`/\` character or contains \`//\` characters, you must \*\*double-encode\*\* this value. - **`signaled_number`** `string` — The number that is signaled to Zoom. - **`start_time`** `string`, format: `date-time` — Call leg start time. - **`total`** `number` — Total cost (USD) for Call Out. Calculated as plan rate by duration. - **`type`** `string`, possible values: `"toll-free", "call-out", "call-in", "US toll-number", "global toll-number", "premium", "premium call-in"` — Call type. - **`to`** `string`, format: `date` — End date for this report. **Example:** ```json { "page_size": 30, "next_page_token": "suQA5LvDBnH5No5OYD7mqpJuFzJqUOHK8U2", "from": "2019-07-15", "to": "2019-07-20", "telephony_usage": [ { "session_id": "sfk/aOFJSJSYhGwk1hnxgw==", "phone_number": "18005555555", "signaled_number": "18005555555", "start_time": "2019-07-15T23:24:52Z", "end_time": "2019-07-15T23:30:19Z", "duration": 6, "total": 11, "country_name": "Macau SAR", "call_in_number": "15555555555", "type": "toll-free", "rate": 12 } ] } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`300\` \
Daily report can only be provided within 6 months prior to the current date. \
\*\*Error Code:\*\* \`200\` \
This API is only available for Video SDK accounts. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/). ### Get webhook logs - **Method:** `GET` - **Path:** `/videosdk/report/webhook_logs` - **Tags:** Video SDK Reports Get the webhook call logs for the Video SDK app created by the current account. **Prerequisites** - A Video SDK account. **[Rate Limit Label](https://marketplace.zoom.us/docs/api-reference/rate-limits#rate-limits):** `MEDIUM` #### Responses ##### Status: 200 \*\*HTTP Status Code:\*\* \`200\` Webhook logs info returned. ###### Content-Type: application/json - **`next_page_token`** `string` — The API uses the next page token to paginate through large result sets. It returns a next page token whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes. - **`page_size`** `integer` — The page size of the result. - **`webhook_logs`** `array` — A list of webhook logs that match the specified query conditions. **Items:** - **`date_time`** `string` — The recorded time of the log. - **`endpoint`** `string` — The webhook callback URL. - **`event`** `string` — The event's name. - **`failed_reason_type`** `integer`, possible values: `1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16` — The reason type for connection error messages: \* \`1\` - Read time out. \* \`2\` - Connection refused. \* \`3\` - Hystrix fallback. \* \`4\` - Hystrix timeout. \* \`5\` - Async error. \* \`6\` - DNS forbidden. \* \`7\` - Remote error. \* \`8\` - In delegate white list. \* \`9\` - Cert error. \* \`10\` - Need instant retry. \* \`11\` - Host name verify failed. \* \`12\` - TLS verify failed. \* \`13\` - DNS resolve time out. \* \`14\` - No client. \* \`15\` - Resource not found. \* \`16\` - Too many requests. - **`request_body`** `string` — The request body. - **`request_headers`** `string` — The request header. - **`request_id`** `string` — The unique identifier for a webhook request, which remains unchanged across retry attempts. - **`response_body`** `string` — The response body. - **`response_headers`** `string` — The response headers. - **`retry_num`** `integer`, possible values: `0, 1, 2, 3` — The number of retry attempts for this webhook request. A value of 0 signifies that the request is the initial send and not a retry. - **`status`** `integer` — The HTTP code returned from the endpoint. If the webhook is not sent to the endpoint due to an internal error, the status is \`-1\` - **`subscription_id`** `string` — The event subscription's unique ID. - **`trace_id`** `string` — A distributed tracing identifier used in this webhook request context, commonly used for troubleshooting. When multiple webhook events are triggered within the same context, they may share the same \`trace\_id\`. **Example:** ```json { "next_page_token": "b43YBRLJFg3V4vsSpxvGdKIGtNbxn9h9If2", "page_size": 30, "webhook_logs": [ { "event": "session.started", "status": 429, "failed_reason_type": 1, "endpoint": "https://example.com", "subscription_id": "9qwt8mkBEW2O6fPuxBpXpA", "request_headers": "N/A", "request_body": "{\"event\":\"session.started\",\"payload\":{\"account_id\":\"qnFRJ-Q3QxmK2oXXsXSv1A\",\"object\":{\"session_name\":\"1\",\"start_time\":\"2025-09-09T06:12:46Z\",\"session_id\":\"GfIcwDUNQyGy2Uo7ozIVXg==\",\"id\":\"GfIcwDUNQyGy2Uo7ozIVXg==\"}},\"event_ts\":1757398366655}", "response_headers": "{\"Server\":\"nginx\",\"Content-Type\":\"text/html; charset=UTF-8\"}", "response_body": "N/A", "date_time": "2022-09-09T08:11:38Z", "trace_id": "WEB_5f1752ba04e4ffeccde2f2a923c106f9", "request_id": "e8ca3e3c_0196_4dc8_9f9e_81217d9000e6", "retry_num": 0 } ] } ``` ##### Status: 400 \*\*HTTP Status Code:\*\* \`400\` \
Bad Request \*\*Error Code:\*\* \`1501\` \
The 'to' date must be after the 'from' date. \
\*\*Error Code:\*\* \`1502\` \
The date range must be within the last seven days. \
\*\*Error Code:\*\* \`1503\` \
The dates must follow the format: \`yyyy-MM-dd'T'HH:mm:ss'Z'\`. \
\*\*Error Code:\*\* \`1504\` \
The 'from' date must be before the current date(UTC). \
\*\*Error Code:\*\* \`1506\` \
The 'retry\_num' value must be an integer within the range of 0 to 3. \
##### Status: 401 \*\*HTTP Status Code:\*\* \`401\` \
Unauthorized Invalid access token. ##### Status: 404 \*\*HTTP Status Code:\*\* \`404\` \
Not Found \*\*Error Code:\*\* \`1401\` \
No Video SDK app created by this account. \
##### Status: 429 \*\*HTTP Status Code:\*\* \`429\` \
Too Many Requests. For more information, see \[rate limits]\(https\://developers.zoom.us/docs/api/rate-limits/).