How do I download a Cloud Recording that has a recording_play_passcode (without user interaction)?

API Endpoint(s) and/or Zoom API Event(s)
GET https://api.zoom.us/v2/users/${userId}/recordings

Description
I need to programmatically download all my Cloud Recordings from all my team.

Error?
If I try to GET the {{download_url}} I receive a web page asking : Enter the passcode to watch “{{meeting_topic}}”
If I try to GET {{download_url}}?access_token={{recording_play_passcode}} I receive an error
{“status”:false,“errorCode”:124,“errorMessage”:“Forbidden”}

How To Reproduce
Steps to reproduce the behavior:
*1. GET https://api.zoom.us/v2/users/${userId}/recordings
*2. Bearer TOKEN

@oscar.eduardo Hope you will be fine.

Please watch the session here on how to auto-download ZoomCloud recordings.

Hi, NAK!

Thanks a lot for sharing your video. However that was not exactly my issue. I am able to download / stream a recording as soon as it completes, by listening to the event webhook.

What I need to do is to get all my recordings in ZOOM and download them. To do that, I use:
GET https://api.zoom.us/v2/users/${userId}/recordings?from=${fromDate}&to=${toDate}

Then I receive a list of meetings with their recording_files and download_url. However I have no download_token. What I have, instead, is recording_play_passcode, which I don’t know how to pass along with download_url to avoid the issues I mentioned in the first message:

  1. Download an HTML which asks for a password, instead of the video
  2. Receiving a message {“status”:false,“errorCode”:124,“errorMessage”:“Forbidden”}

Any ideas?

Thanks a lot again!

Oscar

@oscar.eduardo

You need to use /meetings/{meetingId}/recordings api with ?include_fields= download_access_token&ttl= 604800 to get the download_access_token.

Thanks

In :point_up_2: API call you to have a meetings collection once the response is with status 200 then iterate the meeting object one by one & then use :point_down:

Hey, NAK!

That’s really cool. I think I am almost there…

At this point I am having a crazy behavior. When I user the meeting.id (that looks like 82645894383), sometimes I get a completely different meeting recordings, sometimes I get Error - Request failed with status code 404 {“code”:3301,“message”:“This recording does not exist.”}.

I searched for this message and I’ve found this:

They say I should use meeting.uuid instead of meeting.id. However when I do it, I got the error Error - Request failed with status code 404 {“code”:3301,“message”:“This recording does not exist.”}

Any trick here, my friend?

Thank you very much for your help!

Cheers!

Oscar

Also, I think I got a big block: my recordings are saved not based on meetings scheduled inside ZOOM, but when we open the ZOOM room and press the Record to Cloud button. To give you an examples, if I call:
https://api.zoom.us/v2/users/oscar@crewhu.com/meetings
This is all time, I get only 4 meetings (tests that I performed at some point).
However, if I call:
https://api.zoom.us/v2/users/oscar@crewhu.com/recordings?from=2020-04-16&to=2020-04-19
For several different timeframes, I get dozens of meetings and its recordings…

I’m stuck…

Hi, NAK!

I finally found the solution. Download the recordings via:
GET https://api.zoom.us/v2/users/${userId}/recordings?from=${fromDate}&to=${toDate}
Is what I needed.

And I was able to use the download_url that comes when I call this endpoint. I just appended a access_token, generated via JWT App. How to is here:
https://developers.zoom.us/docs/api/rest/reference/zoom-api/methods/#operation/recordingGet
https://developers.zoom.us/docs/platform/build/jwt-app/

So, I will:
GET ${jsonEvent.download_url}?access_token=${ZOOM_JWT_TOKEN}
And it is DONE!

I was able to download all my old recordings using this approach.

Thanks a lot for you help!

Cheers!

Oscar

1 Like

The JWT App type is expiring soon you need to switch to OAuth.

To download a Cloud Recording that has a recording_play_passcode without user interaction, you will need to use the Zoom API and a programming language such as Python to automate the process.

Here are the general steps to download a Cloud Recording:

  1. Use the Zoom API to get the recording details, including the download_url and recording_play_passcode.
  2. Use the download_url and recording_play_passcode to generate a download link for the recording.
  3. Use a Python library such as requests to download the recording from the generated link.

Here’s an example Python code snippet that demonstrates how to download a Cloud Recording using the Zoom API:
import requests

Replace these values with your own API credentials and recording ID

zoom_api_key = ‘YOUR_API_KEY’
zoom_api_secret = ‘YOUR_API_SECRET’
recording_id = ‘YOUR_RECORDING_ID’
play_passcode = ‘YOUR_RECORDING_PLAY_PASSCODE’

Use the Zoom API to get the recording details

url = f’https://api.zoom.us/v2/meetings/{recording_id}/recordings
headers = {‘Authorization’: f’Bearer {zoom_api_key}.{zoom_api_secret}'}
response = requests.get(url, headers=headers)
recording = response.json()[‘recording_files’][0]

Use the download_url and recording_play_passcode to generate a download link

download_link = f’{recording[“download_url”]}?access_token={recording[“recording_access_token”]}&playback_access_token={play_passcode}’

Download the recording using the generated link

with open(‘my_recording.mp4’, ‘wb’) as f:
response = requests.get(download_link)
f.write(response.content)

Note that you will need to replace the zoom_api_key , zoom_api_secret , recording_id , and play_passcode values with your own API credentials and recording details.

2 Likes