Zoom Cloud recording “download_URL” working only in browser


@shravan do you know if there are any authentication profiles on your account or user level settings restricting access to cloud recordings from specific domains?

did you find the solution ? I am not getting any response from zoom team and there is no way to implement this. Please someone provide solution for this.

Hi Shravan
Did this work for you. I am having the same problem. Download_url returns a html response and not the recording (using Node.js, JWT)

No it is not resolve,so I’m using webhook to fix that problem

Hey @ankit, @shoeb, @shravan,

Can you please share the code you are using to download the file?

Please share steps to reproduce the issue.


Hey @tommy,

This is my code.

$destination = $dir . "/movie.mp4";
$authorization = 'Authorization: Bearer ' . $token;

$url = $url . '?access_token=' . $token;
$fp = fopen($destination, "w");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);   
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);    
curl_setopt($ch, CURLOPT_FILE, $fp);


url and token is download_url and download_token in Recording Completed

And result:

I have same issue.

Can anybody help me?

1 Like

Hey @karasiov, @HyoSeong,

Can you try just using the ?access_token=token query param and not the Authorization Bearer?

That should fix the issue.


1 Like

Thanks for reply, @tommy
I changed my code

$destination = $dir . "/movie.mp4";
//$authorization = 'Authorization: Bearer ' . $token;
$url = $url . '?access_token=' . $token;
$fp = fopen($destination, "w");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FILE, $fp);

Then the result is

Access denied

But cURL command works, postman works too. ( download_url?access_token=somelongtoken )
(This is weird)

Temporary I use Get Meeting Recordings API, this API return download_url too,
But It doesn’t need any token to download.

Hey @HyoSeong,

Can you try allowing redirects in your request to download the file:

Does it have the token included?


not OP but this fixed my 401 / getting HTML response. thanks!

1 Like

Thanks for sharing @mokutsu! :slight_smile:


For clarify the correct curl command that worked for me is

curl -L -X GET <download_url_from_meeting_api>?access_token=<jwt_token>

The docs are confusing on this one as <download_path> is no where to be found

1 Like

@tommy, @mokutsu
I have the same issue I am able to download using a browser when I am logged in the Download url plus the JWT token as a query parameter works.
But when I do the same using my php code using curl it gives password required page in return.
@tommy. I see that there are multiple questions on this.
I am guessing you may have something that worked end to end. So please post full code and steps that you guys have tested and work

  1. Download the file using curl in PHP not command line shell
  2. Get the actual file name instead of specifying one.

I have code for all this but I can not get past the password required using PHP curl.

Any help will be greatly appreciated.


Hey @psuhas,

Thanks for sharing and your feedback. We will use it to improve our docs.


Hey @ssnukala,

Make sure of, add the JWT Token as a query param and not as a request header:


I see I have replied to a few of your posts already in this thread, let’s continue this discussion there:

Let me know if that helps!


you are trying to open the destinarion with write permission, please try with “r” instead of “w” like this:

$fp = fopen($destination, "r");

1 Like

Thanks for sharing that tip @Emanuel_Aguirre! :slight_smile:


Hi @tommy when I am trying to download the recording the I get the 301 error ( MOVED PERMANENTLY ).

I am trying to download it via ruby code

please find the code snippeduri= URI(url)
http = proxy.start(uri.host, :use_ssl => false , :verify_mode=>OpenSSL::SSL::VERIFY_NONE)
req = Net::HTTP::Get.new(uri,initheader = header)
response = http.request(req)

when I inspect this response it gives 301 error please suggest how to resolve it

Hi @itsupportgl,

Typically, a 300/301 error on recording downloads means the recording was deleted or no longer exists. Can you share the recording ID or the Meeting ID so I can take a closer look? If you happen to have a screenshot of the recording reflected in the UI as well, this would be helpful.