Cloud recording
Zoom Video SDK sessions offer cloud recording using:
- In-session SDK functions to enable session hosts to start, pause, resume, and stop recordings. See the Objective-C or Swift tab for these functions.
- Cloud recording APIs to enable Developers to initiate and manage cloud recording functions. See the REST API tab for details.
Recording resolution depends on the video quality being sent from the Video SDK, with a maximum resolution of 1080p on macOS.
Zoom recommends that you provide an in-product notice to your end-users when a user enables cloud recording.
Prerequisites
Recording options
You can record Video SDK sessions in many different ways, such as:
Video or screen sharing:
- Record active speaker with shared screen
- Record gallery view with shared screen
- Record active speaker, gallery view and shared screen separately
Audio:
- Record audio-only files
- Record one audio file for all users
- Record a separate audio file of each user
Chat:
- Save chat messages from the session
Advanced:
- Add a timestamp to the recording
- Display users' names in the recording
- Record thumbnails when sharing
- Optimize the recording for a third party video editor
Record user video files
You can also record individual user video files. To do so, contact Developer Support and ask for the ability to "Enable ISO Video for V-SDK".
Once enabled, the host must set the cloud_recording_option property to 1 in the Video SDK JWT. Users must also set the cloud_recording_election property to 1 in the their Video SDK JWT to allow individual recording.
Recordings do not include transcription and translations, but you can separately add these features to your integration. See the Live transcription and translation documentation for details.
Initialize cloud recording
After joining a session, call ZMVideoSDK.sharedVideoSDK()?.getRecordingHelper() to get the cloud recording client.
if let recordingHelper = ZMVideoSDK.sharedVideoSDK()?.getRecordingHelper() {
}
ZMVideoSDKRecordingHelper *recordingHelper = [[ZMVideoSDK sharedVideoSDK] getRecordingHelper()];
Start recording
if recordingHelper.canStartRecording() == .ZMVideoSDKErrors_Success {
recordingHelper.startCloudRecording()
}
if ([recordingHelper canStartRecording] == ZMVideoSDKErrors_Success) {
[recordingHelper canStartRecording];
}
To start recording, PATCH recording.start to the /events endpoint.
Endpoint: https://api.zoom.us/v2/videosdk/sessions/{sessionId}/events
Request header:
{
"Authorization": "Bearer {VIDEOSDK_JWT_TOKEN}"
}
Request body:
{
"method": "recording.start"
}
Response code:
202 Accepted
Response body: Empty
Stop recording
recordingHelper.stopCloudRecording()
[recordingHelper stopCloudRecording];
To stop recording, PATCH recording.stop to the /events endpoint.
Endpoint: https://api.zoom.us/v2/videosdk/sessions/{sessionId}/events
Request header:
{
"Authorization": "Bearer {VIDEOSDK_JWT_TOKEN}"
}
**Request body:**
{
"method": "recording.stop"
}
Response code:
202 Accepted
Response body: Empty
Spotlight user
Cloud recording shows the active speaker when you record video to the cloud with the Cloud recording setting:
- Record active speaker with shared screen or
- Record active speaker, gallery view and shared screen separately, with Active speaker selected.
See Account: Cloud recording for details.
This may cause the active speaker to change unexpectedly, for example if another user is unmuted and coughs. If you want to prevent this, or keep one speaker as the active speaker in the cloud recording, you can spotlight a user.
A host or manager can use choose to spotlight a user's video in the cloud recording. This returns the user ID for the spotlit user in the video active change event. The spotlit user remains the active user, regardless of whether they are speaking. This also impacts the behavior in the recording file. When you select a record active speaker option, the recording will always show the spotlit user's video.
See the Video Helper documentation in the SDK reference for details.
Get account recordings
REST API only.
To get all of the cloud recordings for the account, GET /recordings.
Endpoint: https://api.zoom.us/v2/videosdk/recordings
Get session recordings
REST API only.
To get all the recordings for the session, GET {sessionId}/recordings.
Endpoint: https://api.zoom.us/v2/videosdk/sessions/{sessionId}/recordings
Recording completed webhook
You can also receive a POST request to your server with JSON (a webhook) once the recording has completed processing. You can use Webhooks to automate distribution or uploading of the recording files to your own cloud storage system. See Using Zoom Webhooks and the session.recording_completed webhook for details.
For more details, see the full Video SDK API and Webhook reference pages.
View recordings
Recordings are also available to view and download from your Video SDK Account Recording page.
Get transcript and summary
To add a transcript or AI summary to the cloud recording, set the cloud_recording_transcript_option field in the JWT used to start the session.
0(default) - Neither transcript nor summary1- Transcript only2- Transcript and summary
See the final setting in the JWT payload table for details.
Get AI summary
To receive the AI summary, enable both cloud recording (in the SDK) and session transcript (
cloud_recording_transcript_optionJWT field set to2). Each feature incurs a separate charge. See the Zoom Developer pricing page for details.
Start cloud recording
See the platform get started documentation for details about how to start and join a session. After joining a session, call startCloudRecording to start recording. This will also start the transcript and AI summary autogeneration if you enabled it in the JWT.
Transcript and summary webhook notifications
After a session ends, it may take some time to generate the transcript and AI summary. You can use webhooks to receive notifications when they're ready.
Subscribe to the Video SDK session.recording_transcript_completed webhook to be notified when the transcript is completed, and session.recording_summary_completed to be notified when the summary is completed. See Using webhooks for setup details.
Note: These webhooks are available to Zoom Build Platform universal credit accounts.
Get download links
Once the transcript or AI summary is generated, you can retrieve it by calling:
GET /videosdk/sessions/{sessionId}/recordings
Sample response:
{
"timezone": "",
"duration": 1,
"session_id": "oiFKKKL/RyGdm9W1r1Ll6w==",
"session_name": "willie3",
"session_key": "",
"start_time": "2025-05-09T11:02:09Z",
"total_size": 4869060,
"recording_count": 3,
"recording_files": [
{
"id": "aaa111",
"status": "completed",
"recording_start": "2025-05-09T11:02:22Z",
"recording_end": "2025-05-09T11:03:24Z",
"file_type": "MP4",
"file_size": 3892799,
"download_url": "https://example.com/download_url12345",
"recording_type": "shared_screen_with_speaker_view",
"file_extension": "MP4"
},
{
"id": "bbb222",
"status": "completed",
"recording_start": "2025-05-09T11:02:22Z",
"recording_end": "2025-05-09T11:03:24Z",
"file_type": "M4A",
"file_size": 974973,
"download_url": "https://example.com/download_url55555",
"recording_type": "audio_only",
"file_extension": "M4A"
},
{
"id": "ccc333",
"status": "completed",
"recording_start": "2025-05-09T11:02:22Z",
"recording_end": "2025-05-09T11:03:24Z",
"file_type": "TIMELINE",
"file_size": 22543,
"download_url": "https://example.com/download_url67890",
"recording_type": "timeline",
"file_extension": "JSON"
},
{
"id": "ddd444",
"status": "completed",
"recording_start": "2025-05-09T11:02:22Z",
"recording_end": "2025-05-09T11:03:24Z",
"file_type": "TRANSCRIPT",
"file_size": 1288,
"download_url": "https://example.com/download_url09876",
"recording_type": "audio_transcript",
"file_extension": "VTT"
},
{
"id": "eee555",
"status": "completed",
"recording_start": "2025-05-09T11:02:22Z",
"recording_end": "2025-05-09T11:03:24Z",
"file_type": "SUMMARY",
"file_size": 1039,
"download_url": "https://example.com/download_url54321",
"recording_type": "summary",
"file_extension": "JSON"
}
],
"download_access_token": "XXXXXXX"
}
Download
Use the download_url for files with file_type of TRANSCRIPT or SUMMARY to download the transcript or AI summary.
TRANSCRIPT- a VTT file containing the time-coded session transcript. The response includes this file when you enable the session transcript (cloud_recording_transcript_optionset to1or2).SUMMARY- a JSON file containing the AI-generated summary of the session. The response includes this file only when you enable both cloud recording and session transcript (cloud_recording_transcript_optionset to2), and your account is billed for both features. The current summary output is limited in scope and only includes thesummarysection.