Video SDK Master API
- 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.
Zoom Video SDK APIs use JSON Web Tokens (JWT) 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, click View JWT token in the API keys section to quickly generate and use a token. See Make API Requests 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:
/accounts/{accountId}/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 for details.
Granular Scopes: video_sdk:update:storage_location_settings:master
Rate Limit Label: LIGHT
Not supported in Gov cluster
Parameters
accountId required
- In:
path
Unique identifier of the account.
string
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_idstring— The ID for the selected storage location.
Example:
{
"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` <br> Bad Request **Error Code:** `400` <br> The storage ID matches the currently selected account. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `3335` <br> Your account currently does not support CMR BYOS storage. <br> **Error Code:** `3336` <br> Please enable CMR BYOS storage first. Use the API (POST /v2/videosdk/settings/storage/location) to create one and enable this feature. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3310` <br> This storage ID does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
List storage location
- Method:
GET - Path:
/accounts/{accountId}/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 for details.
Granular Scopes: video_sdk:read:storage_location:master
Rate Limit Label: LIGHT
Not supported in Gov cluster
Parameters
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 List the Bring Your Own Storage (BYOS) location list.
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`).bucket(required)string— The Amazon S3 bucket.region(required)string— The AWS region.
selectedboolean— Storage is now customer-selected.
Example:
[
{
"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` <br> Forbidden **Error Code:** `3335` <br> Your account currently does not support CMR BYOS storage. <br> **Error Code:** `3336` <br> Please enable CMR BYOS storage first. Use the API (POST /v2/videosdk/settings/storage/location) to create one and enable this feature. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Add storage location
- Method:
POST - Path:
/accounts/{accountId}/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 for details.
Granular Scopes: video_sdk:write:storage_location:master
Rate Limit Label: LIGHT
Not supported in Gov cluster
Parameters
accountId required
- In:
path
Unique identifier of the account.
string
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:
{
"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:
{
"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` <br> Bad Request **Error Code:** `3313` <br> Unable to connect to the storage location. Please check your configuration and try again. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `3335` <br> Your account currently does not support CMR BYOS storage. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Storage location detail
- Method:
GET - Path:
/accounts/{accountId}/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 for details.
Granular Scopes: video_sdk:read:storage_location_detail:master
Rate Limit Label: LIGHT
Not supported in Gov cluster
Parameters
storageLocationId required
- In:
path
The storage location ID.
string
accountId required
- In:
path
Unique identifier of the account.
string
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:
{
"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` <br> Bad Request **Error Code:** `400` <br> Invalid parameters. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `3335` <br> Your account currently does not support CMR BYOS storage. <br> **Error Code:** `3336` <br> Please enable CMR BYOS storage first. Use the API (POST /v2/videosdk/settings/storage/location) to create one and enable this feature. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3310` <br> This storage ID does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Delete storage location detail
- Method:
DELETE - Path:
/accounts/{accountId}/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 for details.
Granular Scopes: video_sdk:delete:storage_location_detail:master
Rate Limit Label: LIGHT
Not supported in Gov cluster
Parameters
storageLocationId required
- In:
path
The storage location ID.
string
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 204 Delete Bring Your Own Storage (BYOS) storage location.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `400` <br> Invalid parameters. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `3335` <br> Your account currently does not support CMR BYOS storage. <br> **Error Code:** `3336` <br> Please enable CMR BYOS storage first. Use the API (POST /v2/videosdk/settings/storage/location) to create one and enable this feature. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3310` <br> This storage ID does not exist. <br>
Status: 405 **HTTP Status Code:** `405` <br> Method Not Allowed **Error Code:** `3312` <br> 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. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Change storage location detail
- Method:
PATCH - Path:
/accounts/{accountId}/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 for details.
Granular Scopes: video_sdk:update:storage_location_detail:master
Rate Limit Label: LIGHT
Not supported in Gov cluster
Parameters
storageLocationId required
- In:
path
Storage location ID.
string
accountId required
- In:
path
Unique identifier of the account.
string
Request Body
Content-Type: application/json
namestring— The custom name.providerstring, possible values:"aws_s3"— The provider (currently only supports `aws_s3`).s3object— Currently only supports Amazon S3 access key and secret.access_keyobject— When `authentication_mechanism` value is `aws_access_key`.idstring— The AWS access key. When you get or list the storage location detail, this key will be blocked.keystring— The AWS secret. When you get or list the storage location detail, this secret will be blocked.
authentication_mechanismstring, possible values:"aws_access_key"— The authentication mechanism (currently only supports `aws_access_key`).bucketstring— The Amazon S3 bucket (cannot change bucket).regionstring— The AWS region (cannot change region).
Example:
{
"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` <br> Bad Request **Error Code:** `400` <br> Can not change the bucket and region. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `3335` <br> Your account currently does not support CMR BYOS storage. <br> **Error Code:** `3336` <br> Please enable CMR BYOS storage first. Use the API (POST /v2/videosdk/settings/storage/location) to create one and enable this feature. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found This storage ID does not exist.
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
List recordings of an account
- Method:
GET - Path:
/accounts/{accountId}/videosdk/recordings - Tags: Cloud Recording
List Video SDK Cloud Recordings available on an account.
All recording files except individual participant audio files (the "Record a separate audio file of each participant" account option) will be tabulated in the recording_count and listed in the recording_files array. To get the list of individual participant audio files, use the List session's recordings API.
To access a password-protected cloud recording, add an access_token parameter to the download URL and provide your Video SDK API JWT as the value of the access_token.
Granular Scopes: video_sdk:read:list_account_recordings:master
Rate Limit Label: MEDIUM
Parameters
page_size
- In:
query
The number of records returned within a single API call.
integer, default: 30
next_page_token
- In:
query
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.
string
trash
- In:
query
Query trash.
true: List recordings from trash.false: Do not list recordings from the trash.
The default value is false. If you set it to true, you can use the trash_type property to indicate the type of Cloud recording that you need to retrieve.
boolean, default: false
trash_type
- In:
query
The type of Cloud recording that you would like to retrieve from the trash. The value can be one of the following:
`session_recordings`: List all session recordings from the trash.
`recording_file`: List all individual recording files from the trash.
string, default: "session_recordings"
from
- In:
query
The start date in 'yyyy-mm-dd' UTC format for the date range for which you would like to retrieve recordings. The maximum range can be a month. If no value is provided for this field, the default will be current date. For example, if you make the API request on June 30, 2020, without providing the from and to parameters, by default the value of from field will be "2020-06-30" and the value of the to field will be "2020-07-01".
Note: Files designated as trash cannot be filtered by date range and thus, the from and to fields should not be used for files designated as trash.
string, format: date
to
- In:
query
End date in 'yyyy-mm-dd' UTC format.
string, format: date
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 **HTTP Status Code:** `200` List of recording objects returned.
Content-Type: application/json
fromstring— The start date of the query date range.next_page_tokenstring— The next page token to paginate through large result sets.page_sizeinteger— The number of records returned within a single API call.tostring— The end date of the query date range.total_recordsinteger— The number of all records available across pages.
sessionsarray— List of recording sessionsItems: All of: durationinteger— Session duration.recording_countinteger— Number of recording files returned in the response of this API call. This includes the `recording_files` and `participant_audio_files` files.session_idstring— Unique session identifier. Each instance of the session will have its own `session_id`.session_keystring— The Video SDK custom session ID.session_namestring— Session name.start_timestring, format:date-time— The time at which the session started.total_sizeinteger, format:int64— The total file size of the recording. This includes the `recording_files` and `participant_audio_files` files.
All of: recording_filesarray— List of recording files.Items: All of: deleted_timestring— The time at which the recording was deleted. Returned in the response only for the trash query.download_urlstring— 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_urlstring— The S3 path for bring your own storage recording.file_sizenumber— The recording file size.file_typestring— 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`.idstring— The recording file ID. This is included in the general query response.recording_endstring— The recording end time. This is included in the the general query response.recording_startstring— The recording start time.recording_typestring— 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`statusstring, possible values:"completed"— The recording status.
All of: participant_video_filesarray— 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_urlstring— 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_extensionstring— The archived file's file extension.file_namestring— The recording file's name.file_sizenumber— The recording file's size, in bytes.file_typestring— 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`.idstring— The recording file's unique ID. This is included in the general query response.recording_endstring, format:date-time— The recording file's end time. This is included in the general query response.recording_startstring, format:date-time— The recording file's start time.recording_typestring, possible values:"individual_user", "individual_shared_screen"— The type of recording file: * `individual_user` * `individual_shared_screen`.statusstring, possible values:"completed"— The recording file's status.user_idstring— 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_keystring— 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:
{
"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` <br> Not Found **Error Code:** `1001` <br> User {userId} not exist or not belong to this account. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
List session's recordings
- Method:
GET - Path:
/accounts/{accountId}/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.
Granular Scopes: video_sdk:read:list_session_recordings:master
Rate Limit Label: LIGHT
Parameters
sessionId required
- In:
path
The session's ID. If this field's value includes any / characters, you must double-encode the value.
string
include_fields
- In:
query
Get the download_access_token field for downloading session recordings.
string
ttl
- In:
query
Time to live (TTL) of the download_access_token. This is only valid if the include_fields query parameter contains download_access_token. The range is between 0-604800.
integer
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 **HTTP Status Code:** `200` Recording object returned.
Content-Type: application/json
durationinteger— Session duration.recording_countinteger— Number of recording files returned in the response of this API call. This includes the `recording_files` and `participant_audio_files` files.session_idstring— Unique session identifier. Each instance of the session will have its own `session_id`.session_keystring— The Video SDK custom session ID.session_namestring— Session name.start_timestring, format:date-time— The time at which the session started.total_sizeinteger, format:int64— The total file size of the recording. This includes the `recording_files` and `participant_audio_files` files.
recording_filesarray— List of recording files.Items: All of: deleted_timestring— The time at which recording was deleted. Returned in the response only for the trash query.download_urlstring— 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_urlstring— The S3 path for bring your own storage recording.file_sizenumber— The recording file size.file_typestring— 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.idstring— The recording file ID. Included in the general query response.recording_endstring— The recording end time. Included in the general query response.recording_startstring— The recording start time.recording_typestring— 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`statusstring, possible values:"completed"— The recording status.
participant_video_filesarray— 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_urlstring— 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_extensionstring— The archived file's file extension.file_namestring— The recording file's name.file_sizenumber— The recording file's size, in bytes.file_typestring— 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.idstring— The recording file's unique ID. This is included in the general query response.recording_endstring, format:date-time— The recording file's end time. This is included in the general query response.recording_startstring, format:date-time— The recording file's start time.recording_typestring, possible values:"individual_user", "individual_shared_screen"— The type of recording file: * `individual_user` * `individual_shared_screen`.statusstring, possible values:"completed"— The recording file's status.
download_access_tokenstring— The JWT access token for downloading the session recording. This is only returned if the `include_fields` query parameter contains `download_access_token`.
participant_audio_filesarray— 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_urlstring— 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_extensionstring— The archived file's file extension.file_namestring— The recording file's name.file_sizenumber— The recording file's size, in bytes.file_typestring— 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.idstring— The recording file's unique ID. This is included in the general query response.recording_endstring, format:date-time— The recording file's end time. This is included in the general query response.recording_startstring, format:date-time— The recording file's start time.statusstring, possible values:"completed"— The recording file's status.user_idstring— 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_keystring— 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.
participant_video_filesarray— 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_urlstring— 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_extensionstring— The archived file's file extension.file_namestring— The recording file's name.file_sizenumber— The recording file's size, in bytes.file_typestring— 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.idstring— The recording file's unique ID. This is included in the general query response.recording_endstring, format:date-time— The recording file's end time. This is included in the general query response.recording_startstring, format:date-time— The recording file's start time.recording_typestring, possible values:"individual_user", "individual_shared_screen"— The type of recording file: * `individual_user` * `individual_shared_screen`.statusstring, possible values:"completed"— The recording file's status.user_idstring— 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_keystring— 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:
{
"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` <br> Bad Request **Error Code:** `1010` <br> User not found on this account: {accountId}. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3301` <br> There is no recording for this session. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Delete session's recordings
- Method:
DELETE - Path:
/accounts/{accountId}/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.
Granular Scopes: video_sdk:delete:session_recordings:master
Rate Limit Label: LIGHT
Parameters
sessionId required
- In:
path
The session's ID. If the ID begins with a / character or contains // characters, you must double-encode the ID value.
string
action
- In:
query
The recording delete actions:trash - Move recording to trash.delete - Delete recording permanently.
string, possible values: "trash", "delete"
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 204 The recording was successfully deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1010` <br> User does not belong to this account: {accountId}. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3301` <br> There is no recording for this session. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Recover session's recordings
- Method:
PUT - Path:
/accounts/{accountId}/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.
Granular Scopes: video_sdk:update:recover_session_recordings:master
Rate Limit Label: LIGHT
Parameters
sessionId required
- In:
path
The session's ID. If this field's value includes any / characters, you must double-encode the value.
string
accountId required
- In:
path
Unique identifier of the account.
string
Request Body
Content-Type: application/json
actionstring, possible values:"recover"— The action to perform.
Example:
{
"action": "recover"
}Responses
Status: 204 **HTTP Status Code:** `200` Deleted recordings of the session recovered.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1010` <br> User does not belong to this account: {accountId}. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist: {userId}. <br> **Error Code:** `3301` <br> There is no recording for this session. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Delete session's recording file
- Method:
DELETE - Path:
/accounts/{accountId}/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.
Granular Scopes: video_sdk:delete:recording_file:master
Rate Limit Label: LIGHT
Parameters
sessionId required
- In:
path
The session's ID. If this field's value includes any / characters, you must double-encode the value.
string
recordingId required
- In:
path
The recording ID.
string
action
- In:
query
The recording delete actions:trash - Move recording to trash.delete - Delete recording permanently.
string, possible values: "trash", "delete", default: "trash"
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 204 The recording file was successfully deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1010` <br> User does not belong to this account: {accountId}.<br> <br> **Error Code:** `3303` <br> You can not delete an uncompleted session. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3301` <br> There is no recording for this session. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Recover a single recording
- Method:
PUT - Path:
/accounts/{accountId}/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.
Granular Scopes: video_sdk:update:recover_recording_file:master
Rate Limit Label: LIGHT
Parameters
sessionId required
- In:
path
The session's ID. If the ID begins with a / character or contains // characters, you must double-encode the ID value.
string
recordingId required
- In:
path
The recording ID.
string
accountId required
- In:
path
Unique identifier of the account.
string
Request Body
Content-Type: application/json
actionstring, possible values:"recover"
Example:
{
"action": "recover"
}Responses
Status: 204 **HTTP Status Code:** `204` Session recording recovered.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1010` <br> User does not belong to this account: {accountId}. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3301` <br> There is no recording for this session. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
List sessions
- Method:
GET - Path:
/accounts/{accountId}/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
Granular Scopes: video_sdk:read:session_list:master
Rate Limit Label: RESOURCE-INTENSIVE
Parameters
type
- In:
query
The type of session to query:
past- A past session that occurred during the specified date range.live- A live sessions.
This parameter defaults to live.
string, possible values: "past", "live", default: "live"
from required
- In:
query
The start date to query, in yyyy-mm-dd format.
The ranges defined in the from and to parameters should only be a one month range. This is because the report only includes one month's worth of data.
string, format: date
to required
- In:
query
The end date to query, in yyyy-mm-dd format.
The ranges defined in the from and to parameters should only be a one month range. This is because the report only includes one month's worth of data.
string, format: date
page_size
- In:
query
The number of records returned within a single API call.
integer, default: 30
next_page_token
- In:
query
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.
string
session_key
- In:
query
A value that identifies the session. See Video SDK Authorization session payload for details.
string
session_name
- In:
query
The session's name.
string
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 **HTTP Status Code:** `200` Sessions returned. Only available for paid accounts that have dashboard feature enabled.
Content-Type: application/json
fromstring, format:date— The report's start date, in 'yyyy-mm-dd' format.next_page_tokenstring— 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_sizeinteger, default:30— The number of records returned within a single API call.sessionsarray— Information about the session.Items: audio_qualitystring, 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.durationstring— The session's duration, in 'hh:mm:ss' format.end_timestring | null, format:date-time— The session's end time.has_pstnboolean— Whether the PSTN feature was used in the session.has_recordingboolean— Whether the recording feature was used in the session.has_screen_shareboolean— Whether the screen share feature was used in the session.has_session_summaryboolean— Whether the session summary was used in the session.has_videoboolean— Whether video was used in the session.has_voipboolean— Whether VoIP was used in the session.idstring— The session's ID. If the ID begins with a `+`, `/`, or contains `//` characters, you must **double-encode** this value.screen_share_qualitystring, 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_keystring— The Video SDK custom session ID.session_namestring— The session's name.start_timestring, format:date-time— The session's start time.user_countinteger— The session's user count.video_qualitystring, 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.
tostring, format:date— The report's end date, in 'yyyy-mm-dd' format.
Example:
{
"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` <br> Bad Request **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Create a session
- Method:
POST - Path:
/accounts/{accountId}/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.
Granular Scopes: video_sdk:write:session:master
Rate Limit Label: MEDIUM
Parameters
accountId required
- In:
path
Unique identifier of the account.
string
Request Body
Content-Type: application/json
session_name(required)string— The session's name.session_passwordstring— Developer provided session alphanumeric password. It is equivalent to the sessionPassword in the Video SDK interface.settingsobject— Information about the session's settings.auto_recordingstring, possible values:"cloud", "none", default:"none"— The automatic recording settings. * `cloud` - Record the session to the cloud. * `none` - Auto-recording disabled.holdinteger, possible values:0, 1, 2, default:0— The session's hold setting. * `0` - Hold is disabled. Older SDK clients are allowed to join. * `1` - Hold is enabled. Non-host participants enter a holding state and must be admitted by the host. * `2` - Hold is supported but disabled by default. Session hosts can enable it during a session.
Example:
{
"session_name": "My session",
"session_password": "123456",
"settings": {
"auto_recording": "cloud",
"hold": 0
}
}Responses
Status: 201 **HTTP Status Code:** `201` Session created.
Content-Type: application/json
session_name(required)string— The session's name.created_atstring, format:date-time— The date and time when this session was created.passcodestring— Zoom generated numeric code to use when joining the session by phone (PSTN), or from a room (H323/SIP device).session_idstring— The session's ID. If this field's value includes any `/` characters, you must **double-encode** the value.session_numberinteger, format:int64— The session's number. Unique identifier of the session in **long** format, represented as an int64 data type in JSON.session_passwordstring— Developer provided session alphanumeric password. It is equivalent to the sessionPassword in the Video SDK interface.settingsobject— Information about the session's settings.auto_recordingstring, possible values:"cloud", "none", default:"none"— The automatic recording settings. * `cloud` - Record the session to the cloud. * `none` - Auto-recording disabled.global_dial_in_countriesarray— A list of available global dial-in countries.Items: stringglobal_dial_in_numbersarray— Global dial-in countries or regions.Items: countrystring— The country code.country_namestring— Full name of country.numberstring— The phone number, such as +1 2332357613.typestring, possible values:"toll", "tollfree", "premium"— Type of number.
holdinteger, possible values:0, 1, 2, default:0— The session's hold setting. * `0` - Hold is disabled. Older SDK clients are allowed to join. * `1` - Hold is enabled. Non-host participants enter a holding state and must be admitted by the host. * `2` - Hold is supported but disabled by default. Session hosts can enable it during a session.
Example:
{
"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"
}
],
"hold": 0
}
}Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3000` <br> Session name already exists. Try a different session name. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Get session details
- Method:
GET - Path:
/accounts/{accountId}/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
Granular Scopes: video_sdk:read:session_detail:master
Rate Limit Label: HEAVY
Parameters
sessionId required
- In:
path
The session's ID. If the ID begins with a / or contains // characters, you must double-encode the ID value.
string
type
- In:
query
The session types:
past- A past session.live- A live session.scheduled- A scheduled session.
string, possible values: "past", "live", "scheduled", default: "live"
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 **HTTP Status Code:** `200` Session returned.
Content-Type: application/json
audio_qualitystring, 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_atstring, format:date-time— The date and time when this session was created.durationstring— The session's duration, in `hh:mm:ss` format.end_timestring, format:date-time— The session's end time.has_pstnboolean— Whether the PSTN feature was used in the session.has_recordingboolean— Whether the recording feature was used in the session.has_screen_shareboolean— Whether the screen share feature was used in the session.has_session_summaryboolean— Whether the session summary was used in the session.has_videoboolean— Whether video was used in the session.has_voipboolean— Whether VoIP was used in the session.idstring— The session's ID. If the ID begins with a `+`, `/` or contains `//` characters, you must **double-encode** this value.passcodestring— The session's passcode.screen_share_qualitystring, 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_keystring— The Video SDK custom session ID.session_namestring— The session's name.session_numberinteger, format:int64— The session's number. Unique identifier of the session in **long** format, represented as an int64 data type in JSON.settingsobject— Information about the session's settings. Only returns if type=scheduled.auto_recordingstring, possible values:"cloud", "none", default:"none"— The automatic recording settings. * `cloud` - Record the session to the cloud. * `none` - Auto-recording disabled.global_dial_in_countriesarray— A list of available global dial-in countries.Items: stringglobal_dial_in_numbersarray— Global dial-in countries or regions.Items: countrystring— The country code.country_namestring— Full name of country.numberstring— The phone number, such as +1 2332357613.typestring, possible values:"toll", "tollfree", "premium"— Type of number.
holdinteger, possible values:0, 1, 2, default:0— The session's hold setting. * `0` - Hold is disabled. Older SDK clients are allowed to join. * `1` - Hold is enabled. Non-host participants enter a holding state and must be admitted by the host. * `2` - Hold is supported but disabled by default. Session hosts can enable it during a session.
start_timestring, format:date-time— The session's start time.total_minutesinteger— The total number of minutes attended by the sessions's host and users.user_countinteger— The session's user count.video_qualitystring, 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:
{
"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",
"hold": 0,
"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` <br> Bad Request **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Session does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Delete a session
- Method:
DELETE - Path:
/accounts/{accountId}/videosdk/sessions/{sessionId} - Tags: Sessions
Delete a session.
Prerequisites:
- A Video SDK account.
Granular Scopes: video_sdk:delete:session:master
Rate Limit Label: LIGHT
Parameters
sessionId required
- In:
path
The session's ID. If the ID begins with a +, /, or contains // characters, you must double-encode the ID value.
string
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 204 **HTTP Status Code**: `204` Session deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `3000` <br> You cannot delete sessions that have started. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Session does not exist: {sessionId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Use in-session events controls
- Method:
PATCH - Path:
/accounts/{accountId}/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.
Granular Scopes: video_sdk:update:in_session_controls:master
Rate Limit Label: MEDIUM
Parameters
sessionId required
- In:
path
The session's ID. If the ID begins with a / or contains // characters, you must double-encode the ID value.
string
accountId required
- In:
path
Unique identifier of the account.
string
Request Body
Content-Type: application/json
methodstring, 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.paramsobject— The in-session parameters.call_typestring— 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_ipstring— The user's device IP address. Use this field if you pass the `user.invite.room_system_callout` value for the `method` field.h323_headersobject— 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_namestring— Custom name that will be used within the `h323` header.to_display_namestring— Custom remote name that will be used within the session.
invite_optionsobject— Information about the `user.invite.callout` settings.require_greetingboolean, 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_oneboolean, 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_namestring— 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_uuidstring— 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_numberstring— 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_headersobject— 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_headersarray— 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 &quot;X-&quot; per SIP guidelines.Items: keystring— Additional custom SIP header's keyvaluestring— Additional custom SIP header's value
from_display_namestring— Custom name that will be used within the SIP Header.from_uristring— 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 platformto_display_namestring— Custom remote name that will be used within the session.
stream_ingestion_stream_idstring— 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:
{
"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` <br> Bad Request **Error Code:** `300` <br> No permission. <br> **Error Code:** `300` <br> This API is not available for this account, please contact Zoom support. <br> **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br> **Error Code:** `34005` <br> This stream key is already bound to an existing session. Please use a different stream key. <br> **Error Code:** `34007` <br> Failed to bind a stream key to the session. <br> **Error Code:** `34008` <br> Failed to unbind a stream key to the session. <br> **Error Code:** `34009` <br> Failed to send ingested stream data into the session. <br> **Error Code:** `34010` <br> Failed to stop sending ingested stream data into the session. <br> **Error Code:** `34000` <br> Stream ingestion does not exist: {streamId}. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Session is not found or has expired. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Get session live stream details
- Method:
GET - Path:
/accounts/{accountId}/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
Granular Scopes: video_sdk:read:session_livestream:master
Rate Limit Label: LIGHT
Parameters
sessionId required
- In:
path
The session's ID. If the ID begins with a / character or contains // characters, you must double-encode the ID value.
string
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 **HTTP Status Code:** `200` **OK** Live Stream details returned.
Content-Type: application/json
page_urlstring, format:url— The live stream's page URL. This is the URL at which anyone can view the session's live stream.resolutionstring— The number of pixels in each dimension that the video camera can display.stream_keystring— The live stream key.stream_urlstring, format:url— The live stream's URL.
Example:
{
"stream_url": "https://example.com/livestream",
"stream_key": "ABCDEFG12345HIJ6789",
"page_url": "https://example.com/livestream/123",
"resolution": "720p"
}Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br> **Error Code:** `300` <br> Session ID does not exist. <br> **Error Code:** `300` <br> Invalid session ID. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Session does not exist: {sessionId}. <br> **Error Code:** `1001` <br> User does not exist: {0}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Update a session live stream
- Method:
PATCH - Path:
/accounts/{accountId}/videosdk/sessions/{sessionId}/livestream - Tags: Sessions
Use this API to update a session's live stream information.
Prerequisites:
- A Video SDK account
Granular Scopes: video_sdk:update:session_livestream:master
Rate Limit Label: LIGHT
Parameters
sessionId required
- In:
path
The session's ID. If the ID begins with a / character or contains // characters, you must double-encode the ID value.
string
accountId required
- In:
path
Unique identifier of the account.
string
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.resolutionstring— 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:
{
"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` <br> Bad Request **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br> **Error Code:** `300` <br> Session ID does not exist. <br> **Error Code:** `300` <br> Invalid session ID. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Session does not exist: {sessionId}. <br> **Error Code:** `1001` <br> User does not exist: {0}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Update session livestream status
- Method:
PATCH - Path:
/accounts/{accountId}/videosdk/sessions/{sessionId}/livestream/status - Tags: Sessions
Update a session's livestream status.
Prerequisites:
- A Video SDK account
Granular Scopes: video_sdk:update:session_livestream_status:master
Rate Limit Label: LIGHT
Parameters
sessionId required
- In:
path
The session's ID. If the ID begins with a / character or contains // characters, you must double-encode the ID value.
string
accountId required
- In:
path
Unique identifier of the account.
string
Request Body
Content-Type: application/json
actionstring, 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.settingsobject— The session's livestreaming settings.active_speaker_nameboolean— 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_captionstring, 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_namestring— The display name of the session's livestream. Use this field if you pass the `start` value for the `action` field.layoutstring, 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:
{
"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` <br> Session livestream updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br> **Error Code:** `300` <br> Invalid session ID. <br> **Error Code:** `4927` <br> Session {sessionId} has not started. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Session does not exist: {sessionId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Update session status
- Method:
PUT - Path:
/accounts/{accountId}/videosdk/sessions/{sessionId}/status - Tags: Sessions
Use this API to update a session's status.
Prerequisites:
- A Video SDK account
Granular Scopes: video_sdk:update:session_status:master
Rate Limit Label: LIGHT
Parameters
sessionId required
- In:
path
The session's ID. If the ID begins with a / character or contains // characters, you must double-encode the ID value.
string
accountId required
- In:
path
Unique identifier of the account.
string
Request Body
Content-Type: application/json
actionstring, possible values:"end"— The session's type: * `end` &mdash; End the session.
Example:
{
"action": "end"
}Responses
Status: 204 **HTTP Status Code:** `204` Session updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br> **Error Code:** `300` <br> Session ID does not exist. <br> **Error Code:** `300` <br> Invalid session ID. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Session does not exist: {sessionId}. <br> **Error Code:** `1001` <br> User does not exist: {0}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
List session streaming ingestions
- Method:
GET - Path:
/accounts/{accountId}/videosdk/sessions/{sessionId}/stream_ingestions - Tags: Sessions
List all streaming ingestions of a live session.
Prerequisites:
- A Video SDK account.
Granular Scopes: video_sdk:read:list_session_stream_ingestions:master
Rate Limit Label: MEDIUM
Parameters
sessionId required
- In:
path
The session's ID. If the ID begins with a / or contains // characters, you must double-encode the ID value.
string
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 **HTTP Status Code:** `200` Session streaming ingestions returned.
Content-Type: application/json
rtmp_connection_statusinteger, 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_statusinteger, 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_idstring— The stream ingestion ID.
Example:
[
{
"stream_id": "sfk/aOFJSJSYhGwk1hnxgw==",
"rtmp_connection_status": 0,
"rtmp_stream_push_status": 0
}
]Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br> **Error Code:** `300` <br> Invalid session ID. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Session does not exist: {sessionId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
List session users
- Method:
GET - Path:
/accounts/{accountId}/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
typequery parameter, the API defaults to thelivevalue 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
pastvalue for thetypequery parameter.
Prerequisites:
- A Video SDK account.
Granular Scopes: video_sdk:read:session_users:master
Rate Limit Label: HEAVY
Parameters
sessionId required
- In:
path
The session's ID. If the ID begins with a / character or contains // characters, you must double-encode the ID value.
string
type
- In:
query
The session types:
past- A past session.live- A live session.
This value defaults to live.
string, possible values: "past", "live", default: "live"
page_size
- In:
query
The number of records returned within a single API call.
integer, default: 30
next_page_token
- In:
query
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.
string
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 **HTTP Status Code:** `200` Session users returned.
Content-Type: application/json
next_page_tokenstring— 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_sizeinteger, default:30— The number of records returned within a single API call.usersarray— 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_callarray— 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_numberstring— The caller's number.call_typestring— The call type.zoom_numberstring— The toll-free telephone number.
audio_qualitystring, 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_namestring— Web client browserbrowser_versionstring— Web client browser versioncamerastring— The type of camera that the user used during the session.clientstring— Client software or SDK version.connection_typestring— The user's connection type.data_centerstring— 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.devicestring, 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.idstring— The user's ID. This is a unique ID assigned to the user joining a session and is valid for **only** that session.ip_addressstring— The user's IP address.is_original_hostboolean— Whether the current user is the original host of this session.join_timestring, format:date-time— The time at which user joined the session.leave_timestring, 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.locationstring— The user's location.microphonestring— The type of microphone that the user used during the session.namestring— The user's display name.network_typestring, 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.osstring— Device operating systemos_versionstring— Device operating system versionparticipant_uuidstring— 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_qualitystring, 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.speakerstring— The type of speaker that the user used during the session.user_keystring— 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_qualitystring, 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:
{
"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` <br> Bad Request **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br> **Error Code:** `12702` <br> Can not access a session a year ago. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> Session ID is invalid or has not ended. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
List session users QoS
- Method:
GET - Path:
/accounts/{accountId}/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
typequery parameter, the API defaults to thelivevalue 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
pastvalue for thetypequery parameter.
Prerequisites:
- A Video SDK Account
Granular Scopes: video_sdk:read:session_users_qos:master
Rate Limit Label: HEAVY
Parameters
sessionId required
- In:
path
The session's ID. If the ID begins with a / or character or contains // characters, you must double-encode the ID value.
string
type
- In:
query
The session types:
past- A past session.live- A live session.
This value defaults to live.
string, possible values: "past", "live", default: "live"
page_size
- In:
query
The number of items returned per page.
integer, default: 1
next_page_token
- In:
query
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.
string
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 **HTTP Status Code:** `200` Session users returned.
Content-Type: application/json
next_page_tokenstring— 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_sizeinteger, default:1— The number of items per page.usersarray— Information about the session users.Items: browser_namestring— Web client browser.browser_versionstring— Web client browser version.camerastring— The type of camera used during the session.clientstring— Client software or SDK version.connection_typestring— The user's connection type.data_centerstring— 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.devicestring, 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.idstring— The user's ID.ip_addressstring— The user's IP address.is_original_hostboolean— Whether the current user is the original host of this session.join_timestring, format:date-time— The time at which user joined the session.leave_timestring, format:date-time— The time at which user left the session.locationstring— The user's location.microphonestring— The type of microphone used during the session.namestring— The user's display name.network_typestring, 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.osstring— Device operating system.os_versionstring— Device operating system version.speakerstring— The type of speaker used during the session.user_keystring— 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_qosarray— The QoS (quality of service) provided to the user.Items: as_device_from_rwgobject— Information about the session's screen share QoS (quality of service) sent by a participant who joined the meeting via the web client.avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.frame_ratestring— The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30fps.jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.resolutionstring— The number of pixels in each dimension that can be displayed by your video camera.
as_device_to_rwgobject— Information about the session's screen share QoS (quality of service) received by a participant who joined the meeting via the web client.avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.frame_ratestring— The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30fps.jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.resolutionstring— The number of pixels in each dimension that can be displayed by your video camera.
as_inputobject— Information about the session's screen share QoS (quality of service).avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.frame_ratestring— The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30fps.jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.resolutionstring— The number of pixels in each dimension that can be displayed by your video camera.
as_outputobject— Information about the session's screen share QoS (quality of service).avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.frame_ratestring— The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30fps.jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.resolutionstring— The number of pixels in each dimension that can be displayed by your video camera.
audio_device_from_rwgobject— Information about the session's audio quality of service (QoS) sent by a participant who joined the meeting via the web client.avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.
audio_device_to_rwgobject— Information about the session's audio quality of service (QoS) received by a participant who joined the meeting via the web client.avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.
audio_inputobject— Information about the session's audio quality of service (QoS).avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.
audio_outputobject— Information about the session's audio quality of service (QoS).avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.
cpu_pressure_levelobject— The CPU pressure level of the system.system_avg_cpu_pressure_levelstring, possible values:"normal", "fair", "serious", "critical"— The average CPU pressure level of the system.system_max_cpu_pressure_levelstring, possible values:"critical", "serious", "fair", "normal"— The maximum CPU pressure level of the system.system_min_cpu_pressure_levelstring, possible values:"normal", "fair", "serious", "critical"— The minimum CPU pressure level of the system.
cpu_usageobject— Information about CPU usage.system_max_cpu_usagestring— The system's maximum CPU usage.zoom_avg_cpu_usagestring— Zoom's average CPU usage.zoom_max_cpu_usagestring— Zoom's maximum CPU usage.zoom_min_cpu_usagestring— Zoom's minimum CPU usage.
date_timestring, format:date-time— The QoS date.video_device_from_rwgobject— Information about the session's video quality of service (QoS) sent by a participant who joined the meeting via the web client.avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.frame_ratestring— The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30 fps.jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.resolutionstring— The number of pixels in each dimension that can be displayed by your video camera.
video_device_to_rwgobject— Information about the session's video quality of service (QoS) received by a participant who joined the meeting via the web client.avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.frame_ratestring— The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30 fps.jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.resolutionstring— The number of pixels in each dimension that can be displayed by your video camera.
video_inputobject— Information about the session's video quality of service (QoS).avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.frame_ratestring— The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30 fps.jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.resolutionstring— The number of pixels in each dimension that can be displayed by your video camera.
video_outputobject— Information about the session's video quality of service (QoS).avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.frame_ratestring— The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30 fps.jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.resolutionstring— The number of pixels in each dimension that can be displayed by your video camera.
wifi_rssiobject— The QoS metrics for the wireless network's RSSI sent by a participant who joined the meeting through a wireless network.avg_rssiinteger— Average value of the wireless network's received signal strength indicator (RSSI).max_rssiinteger— Maximum value of the wireless network's received signal strength indicator (RSSI).min_rssiinteger— Minimum value of the wireless network's received signal strength indicator (RSSI).rssi_unitstring— Unit of the wireless network's received signal strength indicator (RSSI).
Example:
{
"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` <br> Bad Request **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br> **Error Code:** `12702` <br> Can not access a session a year ago. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized
Status: 403 **HTTP Status Code:** `403` <br> Forbidden
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> This session's detail info is not available.<br>The Session ID is not valid or the session has not ended yet. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Get sharing/recording details
- Method:
GET - Path:
/accounts/{accountId}/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.
Granular Scopes: video_sdk:read:session_user_sharing:master
Rate Limit Label: HEAVY
Parameters
sessionId required
- In:
path
The session's ID. If the ID begins with a / character or contains // characters, you must double-encode the ID value.
string
type
- In:
query
The session types:
past— A past session.live— A live session.
This value defaults to live.
string, possible values: "past", "live", default: "live"
page_size
- In:
query
The number of records returned within a single API call.
integer, default: 30
next_page_token
- In:
query
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.
string
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 **HTTP Status Code:** `200` Session user share returned.
Content-Type: application/json
next_page_tokenstring— 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_sizeinteger, default:1— The number of items per page.usersarray— Array of usersItems: detailsarray— Array of usersItems: contentstring, possible values:"local_recording", "cloud_recording", "desktop", "application", "whiteboard", "airplay", "camera", "video_sdk"— Type of content shared.end_timestring— End time of sharing.start_timestring— Start time of sharing.
idstring— The user's ID.namestring— The user's display name.user_keystring— 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:
{
"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` <br> Bad Request **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br> **Error Code:** `12702` <br> Can not access a session a year ago. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> This session's detail info is not available.<br>This session has not ended yet or the Session ID is invalid. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Get session user QoS
- Method:
GET - Path:
/accounts/{accountId}/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.
Granular Scopes: video_sdk:read:seesion_user_qos:master
Rate Limit Label: HEAVY
Parameters
sessionId required
- In:
path
The session's ID. If the ID begins with a / character or contains // characters, you must double-encode the ID value.
string
userId required
- In:
path
The user's ID.
string
type
- In:
query
The session types.
past- A past session.live- A live session.
This value defaults to live.
string, possible values: "past", "live", default: "live"
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 **HTTP Status Code:** `200` Session user QOS returned.
Content-Type: application/json
browser_namestring— Web client browser name.browser_versionstring— Web client browser version.camerastring— The type of camera that the user used during the session.clientstring— Client software or SDK version.connection_typestring— The user's connection type.data_centerstring— 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.devicestring, 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.idstring— The user's ID.ip_addressstring— The user's IP address.is_original_hostboolean— Whether the current user is the original host of this session.join_timestring, format:date-time— The time at which the user joined the session.leave_timestring, format:date-time— The time at which the user left the session.locationstring— The user's location.microphonestring— The type of microphone that the user used during the session.namestring— The user's display name.network_typestring, 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.osstring— Device operation system.os_versionstring— Device operation system version.speakerstring— The type of speaker that the user used during the session.user_keystring— 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_qosarray— The QoS (quality of service) provided to the user.Items: as_device_from_rwgobject— Information about the session's screen share QoS (quality of service) sent by a user who joined the session via the web client.avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.frame_ratestring— 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).jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.resolutionstring— The number of pixels in each dimension that can be displayed by your video camera.
as_device_to_rwgobject— Information about the session's screen share QoS (quality of service) received by a user who joined the session via the web client.avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.frame_ratestring— The frame rate at which your video camera can produce unique images. Zoom supports a frame rate of up to 30fps.jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.resolutionstring— The number of pixels in each dimension that can be displayed by your video camera.
as_inputobject— Information about the session's screen share QoS (quality of service).avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.frame_ratestring— 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).jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.resolutionstring— The number of pixels in each dimension that can be displayed by your video camera.
as_outputobject— Information about the session's screen share QoS (quality of service).avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.frame_ratestring— 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).jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.resolutionstring— The number of pixels in each dimension that can be displayed by your video camera.
audio_device_from_rwgobject— Information about the session's audio quality of service (QoS) sent by a user who joined the session via the web client.avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.
audio_device_to_rwgobject— Information about the session's audio quality of service (QoS) received by a user who joined the session via the web client.avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.
audio_inputobject— Information about the session's audio quality of service (QoS).avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.
audio_outputobject— Information about the session's audio quality of service (QoS).avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.
cpu_pressure_levelobject— The CPU pressure level of the system.system_avg_cpu_pressure_levelstring, possible values:"normal", "fair", "serious", "critical"— The average CPU pressure level of the system.system_max_cpu_pressure_levelstring, possible values:"critical", "serious", "fair", "normal"— The maximum CPU pressure level of the system.system_min_cpu_pressure_levelstring, possible values:"normal", "fair", "serious", "critical"— The minimum CPU pressure level of the system.
cpu_usageobject— Information about CPU usage.system_max_cpu_usagestring— The system's maximum CPU usage.zoom_avg_cpu_usagestring— Zoom's average CPU usage.zoom_max_cpu_usagestring— Zoom's maximum CPU usage.zoom_min_cpu_usagestring— Zoom's minimum CPU usage.
date_timestring, format:date-time— The QoS date.video_device_from_rwgobject— Information about the session's video quality of service (QoS) sent by a user who joined the session via the web client.avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.frame_ratestring— 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).jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.resolutionstring— The number of pixels in each dimension that can be displayed by your video camera.
video_device_to_rwgobject— Information about the session's video quality of service (QoS) received by a user who joined the session via the web client.avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.frame_ratestring— 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).jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.resolutionstring— The number of pixels in each dimension that can be displayed by your video camera.
video_inputobject— Information about the session's video quality of service (QoS).avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.frame_ratestring— 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).jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.resolutionstring— The number of pixels in each dimension that can be displayed by your video camera.
video_outputobject— Information about the session's video quality of service (QoS).avg_lossstring— The average amount of packet loss. For example, the percentage of packets that fail to arrive at their destination.bitratestring— The number of bits per second that can be transmitted along a digital network, in Kbps.frame_ratestring— 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).jitterstring— The variation in the delay of received packets, in milliseconds.latencystring— The time it takes for a packet to travel from point to point, in milliseconds.max_lossstring— The maximum amount of packet loss. For example, the maximum percentage of packets that fail to arrive at their destination.resolutionstring— The number of pixels in each dimension that can be displayed by your video camera.
wifi_rssiobject— The QoS metrics for the wireless network's RSSI sent by a participant who joined the meeting through a wireless network.avg_rssiinteger— Average value of the wireless network's received signal strength indicator (RSSI).max_rssiinteger— Maximum value of the wireless network's received signal strength indicator (RSSI).min_rssiinteger— Minimum value of the wireless network's received signal strength indicator (RSSI).rssi_unitstring— Unit of the wireless network's received signal strength indicator (RSSI).
Example:
{
"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` <br> Bad Request **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br> **Error Code:** `12702` <br> Can not access a session a year ago. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `3001` <br> This session's detail info is not available.<br>This session has not ended yet or the Session ID is invalid. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
List stream ingestions
- Method:
GET - Path:
/accounts/{accountId}/videosdk/stream_ingestions - Tags: Sessions
List all the stream ingestions on your Zoom account.
Prerequisites:
- A Video SDK account.
Granular Scopes: video_sdk:read:list_stream_ingestions:master
Rate Limit Label: LIGHT
Parameters
page_size
- In:
query
The number of records returned within a single API call.
integer, default: 30
next_page_token
- In:
query
The next page token paginates through a large set of results. Zoom returns this token whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.
string
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 **HTTP Status Code:** `200` Stream ingestion list returned.
Content-Type: application/json
next_page_tokenstring— 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_sizeinteger, default:30— The number of records returned with a single API call.stream_ingestionsarray— Stream ingestion list.Items: backup_stream_urlstring— The backup stream URL.stream_descriptionstring— The stream ingestion description.stream_idstring— The stream ingestion ID.stream_keystring— The stream ingestion key.stream_namestring— The stream ingestion name.stream_urlstring— The stream URL.
Example:
{
"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` <br> Bad Request **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br> **Error Code:** `34014` <br> Failed to list the stream ingestions. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Create a stream ingestion
- Method:
POST - Path:
/accounts/{accountId}/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.
Granular Scopes: video_sdk:write:stream_ingestion:master
Rate Limit Label: LIGHT
Parameters
accountId required
- In:
path
Unique identifier of the account.
string
Request Body
Content-Type: application/json
stream_name(required)string— The stream ingestion name.stream_descriptionstring— The stream ingestion description.
Example:
{
"stream_name": "stream ingestion1",
"stream_description": "stream ingestion1"
}Responses
Status: 201 **HTTP Status Code:** `201` Stream ingestion created.
Content-Type: application/json
backup_stream_urlstring— The backup stream URL.stream_descriptionstring— The stream ingestion description.stream_idstring— The stream ingestion ID.stream_keystring— The stream ingestion key.stream_namestring— The stream ingestion name.stream_urlstring— The stream URL.
Example:
{
"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` <br> Bad Request **Error Code:** `34016` <br> You can only create up to 20 stream ingestions. <br> **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br> **Error Code:** `34011` <br> Failed to create the stream ingestion. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Get a stream ingestion
- Method:
GET - Path:
/accounts/{accountId}/videosdk/stream_ingestions/{streamId} - Tags: Sessions
Get information about a stream ingestion.
Prerequisites:
- A Video SDK account.
Granular Scopes: video_sdk:read:stream_ingestion:master
Rate Limit Label: LIGHT
Parameters
streamId required
- In:
path
The stream ingestion ID.
string
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 **HTTP Status Code:** `200` Stream ingestion object returned.
Content-Type: application/json
backup_stream_urlstring— The backup stream URL.stream_descriptionstring— The stream ingestion description.stream_idstring— The stream ingestion ID.stream_keystring— The stream ingestion key.stream_namestring— The stream ingestion name.stream_urlstring— The stream URL.
Example:
{
"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` <br> Bad Request **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `34001` <br> Stream ingestion does not exist: {streamId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Delete a stream ingestion
- Method:
DELETE - Path:
/accounts/{accountId}/videosdk/stream_ingestions/{streamId} - Tags: Sessions
Delete a stream ingestion.
Prerequisites:
- A Video SDK account.
Granular Scopes: video_sdk:delete:stream_ingestion:master
Rate Limit Label: LIGHT
Parameters
streamId required
- In:
path
The stream ingestion ID.
string
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 204 **HTTP Status Code:** `204` Stream ingestion deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br> **Error Code:** `34015` <br> You cannot delete a steam ingestion that is in use. <br> **Error Code:** `34012` <br> Failed to delete the stream ingestion. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `34001` <br> Stream ingestion does not exist: {streamId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Update a stream ingestion
- Method:
PATCH - Path:
/accounts/{accountId}/videosdk/stream_ingestions/{streamId} - Tags: Sessions
Update a stream ingestion.
Prerequisites:
- A Video SDK account.
Granular Scopes: video_sdk:update:stream_ingestion:master
Rate Limit Label: LIGHT
Parameters
streamId required
- In:
path
The stream ingestion ID.
string
accountId required
- In:
path
Unique identifier of the account.
string
Request Body
Content-Type: application/json
stream_descriptionstring— The stream ingestion description.stream_namestring— The stream ingestion name.
Example:
{
"stream_name": "stream ingestion1",
"stream_description": "stream ingestion1"
}Responses
Status: 204 **HTTP Status Code:** `204` Stream ingestion updated.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br> **Error Code:** `34013` <br> Failed to update the stream ingestion. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `34001` <br> Stream ingestion does not exist: {streamId}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Get cloud recording usage report
- Method:
GET - Path:
/accounts/{accountId}/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: HEAVY
Parameters
from required
- In:
query
The start date to query, in yyyy-mm-dd format.
The ranges defined in the from and to parameters should only be a one month range. This is because the report only includes one month's worth of data.
string, format: date
to required
- In:
query
The end date to query, in yyyy-mm-dd format.
The ranges defined in the from and to parameters should only be a one month range. This is because the report only includes one month's worth of data.
string, format: date
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 **HTTP Status Code:** `200` Clound recording report returned.
Content-Type: application/json
cloud_recording_storagearray— Array of cloud usage objects.Items: datestring, format:date— Date of usage.free_usagestring— Free storage.plan_usagestring— Paid storage.usagestring— Storage used on the date.
fromstring, format:date— Start date for this report.tostring, format:date— End date for this report.
Example:
{
"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` <br> Bad Request **Error Code:** `300` <br> Daily report can only be provided within 6 months prior to the current date. <br> **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Get daily usage report
- Method:
GET - Path:
/accounts/{accountId}/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.
Granular Scopes: video_sdk:read:daily_report:master
Rate Limit Label: HEAVY
Parameters
year
- In:
query
Year for this report.
integer
month
- In:
query
Month for this report.
integer
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 **HTTP Status Code:** `200` Daily report retrieved.
Content-Type: application/json
datesarray— Array of date objects.Items: datestring, format:date— Date for this object.session_minutesinteger— Number of session minutes on this date.sessionsinteger— Number of sessions on this date.usersinteger— Number of participants on this date.
monthinteger— Month for this report.yearinteger— Year for this report.
Example:
{
"year": 2021,
"month": 12,
"dates": [
{
"date": "2021-12-01",
"sessions": 20,
"users": 80,
"session_minutes": 380
}
]
}Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Daily report can only be provided within 6 months prior to the current date. <br> **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Get operation logs report
- Method:
GET - Path:
/accounts/{accountId}/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 for similar usage in Zoom Meetings.
Prerequisites
-
A Video SDK account.
Granular Scopes: video_sdk:read:operation_log:master
Rate Limit Label: HEAVY
Parameters
from required
- In:
query
The start date to query, in yyyy-mm-dd format.
The ranges defined in the from and to parameters should only be a one month range. This is because the report only includes one month's worth of data.
string, format: date
to required
- In:
query
The end date to query, in yyyy-mm-dd format.
The ranges defined in the from and to parameters should only be a one month range. This is because the report only includes one month's worth of data.
string, format: date
page_size
- In:
query
The number of records returned within a single API call.
integer, default: 30
next_page_token
- In:
query
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.
string
category_type
- In:
query
string, possible values: "all", "user", "user_settings", "account", "billing", "im", "recording", "phone_contacts", "webinar", "sub_account", "role", "zoom_rooms" — **Optional** Filter your response by a category type to see reports for a specific category. The value for this field can be one of the following: `all` `user` `user_settings` `account` `billing` `im` `recording` `phone_contacts` `webinar` `sub_account` `role` `zoom_rooms`
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 **HTTP Status Code:** `200` Operation Logs Report Returned.
Content-Type: application/json
fromstring, format:date— Start date for this report.next_page_tokenstring— 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_logsarray— Array of operation log objectsItems: actionstring— Action taken.category_typestring— Category type.operation_detailstring— Operation detail.operatorstring— The user who performed the operation.timestring, format:date-time— The time when the operation was performed.
page_sizeinteger, default:30— The number of records returned within a single API call.tostring, format:date— End date for this report.
Example:
{
"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` <br> Bad Request **Error Code:** `300` <br> Daily report can only be provided within 6 months prior to the current date. <br> **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Get telephone report
- Method:
GET - Path:
/accounts/{accountId}/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 for similar usage in Zoom Meetings.
Prerequisites
-
A Video SDK account.
Granular Scopes: video_sdk:read:telephone:master
Rate Limit Label: HEAVY
Parameters
from required
- In:
query
The start date to query, in yyyy-mm-dd format.
The ranges defined in the from and to parameters should only be a one month range. This is because the report only includes one month's worth of data.
string, format: date
to required
- In:
query
The end date to query, in yyyy-mm-dd format.
The ranges defined in the from and to parameters should only be a one month range. This is because the report only includes one month's worth of data.
string, format: date
page_size
- In:
query
The number of records returned within a single API call.
integer, default: 30
next_page_token
- In:
query
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.
string
type
- In:
query
Audio types:1 - Toll-free Call-in & Call-out.2 - Toll
3 - SIP Connected Audio
string, possible values: "1", "2", "3", default: "1"
query_date_type
- In:
query
The type of date to query:
start_time— Query by call start time.end_time— Query by call end time.session_start_time— Query by session start time.session_end_time— Query by session end time.
This value defaults to start_time.
string, possible values: "start_time", "end_time", "session_start_time", "session_end_time", default: "start_time"
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 **HTTP Status Code:** `200` Telephone report returned.
Content-Type: application/json
fromstring, format:date— Start date for this report.next_page_tokenstring— 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_sizeinteger, default:30— The number of records returned within a single API call.telephony_usagearray— Array of telephony objects.Items: call_in_numberstring— Caller's call-in number.country_namestring— Country name.durationinteger— Call leg duration.end_timestring, format:date-time— Call leg end time.phone_numberstring— Toll-free telephone number.ratenumber— Calling rate for the telephone call.session_idstring— The session's ID. If the ID begins with a `/` character or contains `//` characters, you must **double-encode** this value.signaled_numberstring— The number that is signaled to Zoom.start_timestring, format:date-time— Call leg start time.totalnumber— Total cost (USD) for Call Out. Calculated as plan rate by duration.typestring, possible values:"toll-free", "call-out", "call-in", "US toll-number", "global toll-number", "premium", "premium call-in"— Call type.
tostring, format:date— End date for this report.
Example:
{
"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` <br> Bad Request **Error Code:** `300` <br> Daily report can only be provided within 6 months prior to the current date. <br> **Error Code:** `200` <br> This API is only available for Video SDK accounts. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Get webhook logs
- Method:
GET - Path:
/accounts/{accountId}/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: MEDIUM
Parameters
next_page_token
- In:
query
The next page token is used to paginate through large result sets. The API 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.
string
page_size
- In:
query
The number of records returned within a single API call.
integer, default: 30
from
- In:
query
Start date in format: yyyy-MM-dd'T'HH:mm:ss'Z'. The from and to date range must be within 7 days.
string
to
- In:
query
End date in format: yyyy-MM-dd'T'HH:mm:ss'Z'. The from and to date range must be within 7 days.
string
event
- In:
query
The event name. All types of events are queried if the parameter is not passed.
string
type
- In:
query
The query type:
1- Query all webhook logs.2- Only query failed webhook logs.3- Only query successful webhook logs.
integer, possible values: 1, 2, 3, default: 2
retry_num
- In:
query
The retry_num is used to filter webhook logs based on retry attempts. If not provided, all webhook logs are returned regardless of retry status.
0- Filters logs for initial deliveries (non-retry requests).1- Filters logs for the first retry of webhook requests.2- Filters logs for the second retry of webhook requests.3- Filters logs for the third retry of webhook requests.
integer
accountId required
- In:
path
Unique identifier of the account.
string
Responses
Status: 200 **HTTP Status Code:** `200` Webhook logs info returned.
Content-Type: application/json
next_page_tokenstring— 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_sizeinteger— The page size of the result.webhook_logsarray— A list of webhook logs that match the specified query conditions.Items: date_timestring— The recorded time of the log.endpointstring— The webhook callback URL.eventstring— The event's name.failed_reason_typeinteger, 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_bodystring— The request body.request_headersstring— The request header.request_idstring— The unique identifier for a webhook request, which remains unchanged across retry attempts.response_bodystring— The response body.response_headersstring— The response headers.retry_numinteger, 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.statusinteger— 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_idstring— The event subscription's unique ID.trace_idstring— 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:
{
"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
}
]
}