# Does Webhook response data is invalid after respond to Zoom?

**URL:** <https://devforum.zoom.us/t/does-webhook-response-data-is-invalid-after-respond-to-zoom/87963>\
**Category:** Cloud Recordings\
**Tags:** webhooks\
**Created:** [May 8, 2023, 3:36am UTC](https://devforum.zoom.us/t/does-webhook-response-data-is-invalid-after-respond-to-zoom/87963 "2023-05-08T03:36:37Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![0417taehyun](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/0417taehyun/32/46759_2.png) [@0417taehyun](https://devforum.zoom.us/u/0417taehyun)\
**Post date:** [May 8, 2023, 3:36am UTC](https://devforum.zoom.us/t/does-webhook-response-data-is-invalid-after-respond-to-zoom/87963/1 "2023-05-08T03:36:37Z")

</div>

Does Webhook response data is invalid after respond to Zoom?

I try to download recording files when I get `recording.completed` event by Zoom Webhook and I use the `download_token` and `download_url` for a specific recording file.

However, when I try to download the same file after few days, it raises `Forbidden Error`. Thus, I assume that there is validation time to use the `download_token`, and try to get file with REST API, `POST /meetings/{meeting_id}/recordings`.

Did I miss something, or is it right that there is limited time or validation to use `download_token` in Webhook response?

The below one is a sample Webhook response.

```plaintext
{
    "event": "recording.completed",
    "payload": {
        "account_id": "",
        "object": {
            "recording_files":[
                {
                    "file_type":"M4A",
                    "file_extension":"M4A",
                    "download_url":"https://example.zoom.us/rec/webhook_download/...",
                    "status":"completed",
                    "recording_type":"audio_only"
                }
            ],  
        }
    },
    "download_token": "DOWNLOAD_TOKEN"
}

```

The below on is a sample source code in Python3.11 to download a recording file with a `download_url` and `download_token`.

```plaintext
import requests

target_url = download_url + f"?access_token={download_token}"
binary_file = requests.get(url=target_url).content

```

---

<div class="post-metadata">

**Author:** ![gianni.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/gianni.zoom/32/32523_2.png) [@gianni.zoom](https://devforum.zoom.us/u/gianni.zoom)\
**Post date:** [May 9, 2023, 1:22am UTC](https://devforum.zoom.us/t/does-webhook-response-data-is-invalid-after-respond-to-zoom/87963/2 "2023-05-09T01:22:09Z")

</div>

Hi @0417taehyun , download\_token from webhooks expire after 24 hours. To retrieve those files after 24 hours, you have to use the Cloud Recording API. There’s more context about this in the following thread:

> [@401 error when downloading recording with Server-to-Server OAuth token](https://devforum.zoom.us/t/401-error-when-downloading-recording-with-server-to-server-oauth-token/74351/28):
>
> Hi @daichi @kirolive @david5 @pfa_zoom @jbassi , It’s been confirmed that the webhooks do not support OAuth or Server-to-Server OAuth tokens for cloud recording downloads. This is actually expected behavior and there’s been a request to change the documentation to correct the misguidance. It is recommended that if you want to download cloud recordings after the webhook download\_token has expired, use [Zoom Meeting API](https://developers.zoom.us/docs/api/rest/reference/zoom-api/methods/#operation/recordingGet) . I will submit a feature request to the platform PM to support S2S and OAut…
