# Call Recordings with the Phone API

**URL:** <https://devforum.zoom.us/t/call-recordings-with-the-phone-api/96848>\
**Category:** Phone\
**Created:** [October 16, 2023, 3:05pm UTC](https://devforum.zoom.us/t/call-recordings-with-the-phone-api/96848 "2023-10-16T15:05:45Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![jose](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/jose/32/52765_2.png) [@jose](https://devforum.zoom.us/u/jose)\
**Post date:** [October 16, 2023, 3:05pm UTC](https://devforum.zoom.us/t/call-recordings-with-the-phone-api/96848/1 "2023-10-16T15:05:45Z")

</div>

Hello, we are having an issue figuring out how to download all recordings for a call from start to finish. We are not using WebHooks right now, only the Phone API. Our workflow is something like the following:

1- Get the account call log for the last 6 hours (and we keep moving forward the sliding window), taking note of the calls we already analyzed(completed calls).

2- Get the recordings for each completed call

My questions are, without using webhooks.

- How do we know if the completed call has a recording before downloading it? An announcement says the field **has\_recording** is deprecated and is not even shown in the **accountCallLogs** operation (but is still shown in the json results).

- In case there is a recording, how do we know if it is available for download?

I appreciate any help you can provide.

---

<div class="post-metadata">

**Author:** ![jose](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/jose/32/52765_2.png) [@jose](https://devforum.zoom.us/u/jose)\
**Post date:** [October 17, 2023, 8:34pm UTC](https://devforum.zoom.us/t/call-recordings-with-the-phone-api/96848/2 "2023-10-17T20:34:03Z")

</div>

Is anyone from support at Zoom here?

---

<div class="post-metadata">

**Author:** ![elisa.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/elisa.zoom/32/47836_2.png) [@elisa.zoom](https://devforum.zoom.us/u/elisa.zoom)\
**Post date:** [October 17, 2023, 10:11pm UTC](https://devforum.zoom.us/t/call-recordings-with-the-phone-api/96848/3 "2023-10-17T22:11:09Z")

</div>

Hi @jose  
Thanks for reaching out to us  
To be able to get call recordings you could benefit from our Phone API endpoints  
You could use the Get/users/recordings endpoint

> **[Zoom Phone API](https://developers.zoom.us/docs/api/rest/reference/phone/methods/#operation/phoneUserRecordings)**
>
> API Reference for /docs/api/rest/reference/phone/methods

Regarding your questions, if you are not leveraging webhooks, you would have to wait some minutes to have the recordings ready, unfortunately, we do not have a set time on how much it will take for a recording to be completed and ready to query.  
And yes the has\_recording field has been deprecated.

---

<div class="post-metadata">

**Author:** ![jose](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/jose/32/52765_2.png) [@jose](https://devforum.zoom.us/u/jose)\
**Post date:** [October 18, 2023, 4:01pm UTC](https://devforum.zoom.us/t/call-recordings-with-the-phone-api/96848/4 "2023-10-18T16:01:42Z")

</div>

> [@elisa.zoom](#):
>
> To be able to get call recordings you could benefit from our Phone API endpoints  
> You could use the Get/users/recordings endpoint

Is there any endpoint to get the call recordings from the whole call, from start to finish?

> [@elisa.zoom](#):
>
> Regarding your questions, if you are not leveraging webhooks, you would have to wait some minutes to have the recordings ready, unfortunately, we do not have a set time on how much it will take for a recording to be completed and ready to query.  
> And yes the has\_recording field has been deprecated.

So, if the `has_recording` field is deprecated, how do I know in advance if the call has a recording? this way I would not even try to download it.

---

<div class="post-metadata">

**Author:** ![elisa.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/elisa.zoom/32/47836_2.png) [@elisa.zoom](https://devforum.zoom.us/u/elisa.zoom)\
**Post date:** [October 18, 2023, 4:56pm UTC](https://devforum.zoom.us/t/call-recordings-with-the-phone-api/96848/5 "2023-10-18T16:56:18Z")

</div>

Hi @jose  
We do not have an endpoint to query the specific call recording for a specific call, but we do have webhooks that would suffice this scenario, which is the phone.recording\_completed that will let you know when the recording is ready to download and you will also get the download\_url in the payload

> **[Zoom API Events - Zoom Phone](https://developers.zoom.us/docs/api/rest/reference/phone/events/#operation/phone.recording_completed)**
>
> API Reference for /docs/api/rest/reference/phone/events

---

<div class="post-metadata">

**Author:** ![jose](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/jose/32/52765_2.png) [@jose](https://devforum.zoom.us/u/jose)\
**Post date:** [October 18, 2023, 5:10pm UTC](https://devforum.zoom.us/t/call-recordings-with-the-phone-api/96848/6 "2023-10-18T17:10:23Z")

</div>

Yes, I know that if I use webhooks or websockets notifications, I can get notified when a recording is complete. Still, for cases when the call does not have a recording, I cannot wait for the notification to publish the call. If I get a notification that the call recording is complete, I can be sure that the call has a recording, but if I don’t, how do I know if the call has a recording? In this case, the `has_recording` field was handy.

My workflow is like this:

When a call finishes, I get the call log (pooling every 10s this endpoint: /phone/call\_logs), analyze the call, and:  
1- if the call does not have a recording, I will publish the call ASAP to our systems  
2- If the call has a recording, I wait for the recording to be available for download, download the recording, and publish the call to our system.

Any suggestions?

---

<div class="post-metadata">

**Author:** ![elisa.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/elisa.zoom/32/47836_2.png) [@elisa.zoom](https://devforum.zoom.us/u/elisa.zoom)\
**Post date:** [October 18, 2023, 9:52pm UTC](https://devforum.zoom.us/t/call-recordings-with-the-phone-api/96848/7 "2023-10-18T21:52:13Z")

</div>

Hi @jose  
I see what you mean.  
I do not think there is a workaround for this if you are not using webhooks, you will have to call the phone/call\_logs endpoint and implement the workflow you are currently using/or have in mind

---

<div class="post-metadata">

**Author:** ![jose](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/jose/32/52765_2.png) [@jose](https://devforum.zoom.us/u/jose)\
**Post date:** [October 18, 2023, 9:53pm UTC](https://devforum.zoom.us/t/call-recordings-with-the-phone-api/96848/8 "2023-10-18T21:53:31Z")

</div>

Thanks for the answer, I am wondering what was the decision behind the removal of that field: has\_recordings

---

<div class="post-metadata">

**Author:** ![elisa.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/elisa.zoom/32/47836_2.png) [@elisa.zoom](https://devforum.zoom.us/u/elisa.zoom)\
**Post date:** [October 18, 2023, 9:58pm UTC](https://devforum.zoom.us/t/call-recordings-with-the-phone-api/96848/9 "2023-10-18T21:58:10Z")

</div>

Thank you @jose  
Unfortunately, I am not aware of the reason behind this decision, but I can look internally to see if there is any information available, and if so I will get back to you

---

<div class="post-metadata">

**Author:** ![jose](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/jose/32/52765_2.png) [@jose](https://devforum.zoom.us/u/jose)\
**Post date:** [October 18, 2023, 10:14pm UTC](https://devforum.zoom.us/t/call-recordings-with-the-phone-api/96848/10 "2023-10-18T22:14:23Z")

</div>

One last question: what is the API call to download a recording based on the recording\_id? I cannot find any in the documentation for recordings!

---

<div class="post-metadata">

**Author:** ![elisa.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/elisa.zoom/32/47836_2.png) [@elisa.zoom](https://devforum.zoom.us/u/elisa.zoom)\
**Post date:** [October 18, 2023, 10:22pm UTC](https://devforum.zoom.us/t/call-recordings-with-the-phone-api/96848/11 "2023-10-18T22:22:41Z")

</div>

What endpoint are you talking about? to download phone recordings, you just need user\_id

 ![Screenshot 2023-10-18 at 6.22.28 PM](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/3X/6/c/6c1653538985e53dfd6647ecb86a2372754256d0.png)

---

<div class="post-metadata">

**Author:** ![jose](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/jose/32/52765_2.png) [@jose](https://devforum.zoom.us/u/jose)\
**Post date:** [October 19, 2023, 7:11pm UTC](https://devforum.zoom.us/t/call-recordings-with-the-phone-api/96848/12 "2023-10-19T19:11:14Z")

</div>

When I call that endpoint with my the user\_id coming in the call log, I got not recordings

---

<div class="post-metadata">

**Author:** ![jose](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/jose/32/52765_2.png) [@jose](https://devforum.zoom.us/u/jose)\
**Post date:** [October 19, 2023, 7:21pm UTC](https://devforum.zoom.us/t/call-recordings-with-the-phone-api/96848/13 "2023-10-19T19:21:21Z")

</div>

what about if I use this endpoint: `/phone/call_logs/{record['id']}/recordings`  
I found this in the forum but I cannot find it in the documentation!  
Here is the forum link: [https://devforum.zoom.us/t/change-in-phone-api-call-get-recording-by-call-id-file-url-no-longer-listed-in-documentation/93107](https://devforum.zoom.us/t/change-in-phone-api-call-get-recording-by-call-id-file-url-no-longer-listed-in-documentation/93107)

---

<div class="post-metadata">

**Author:** ![elisa.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/elisa.zoom/32/47836_2.png) [@elisa.zoom](https://devforum.zoom.us/u/elisa.zoom)\
**Post date:** [October 31, 2023, 1:56pm UTC](https://devforum.zoom.us/t/call-recordings-with-the-phone-api/96848/14 "2023-10-31T13:56:12Z")

</div>

Hi @jose  
Sorry for the late reply here  
I can not find the endpoint you are mentioning here, but after reading the thread you shared, it looks like the endpoints are in beta so they are still private

---

<div class="post-metadata">

**Author:** ![maddeveloper999](https://avatars.discourse-cdn.com/v4/letter/m/848f3c/32.png) [@maddeveloper999](https://devforum.zoom.us/u/maddeveloper999)\
**Post date:** [December 27, 2023, 6:58pm UTC](https://devforum.zoom.us/t/call-recordings-with-the-phone-api/96848/15 "2023-12-27T18:58:38Z")

</div>

To download all recordings for a call using the Zoom Phone API without webhooks have you tried these steps?:

1. **Check for Recordings** : Use the `Get/users/recordings` endpoint to attempt to retrieve call recordings, since there’s no direct method to check if a call has a recording [⏺](https://nixinjectorapk.download/)after the deprecation of the `has_recording` field.
2. **Downloading Recordings** : Download recordings using the `Get/users/recordings` endpoint. Note that there’s no specific way to determine if a recording is ready for download without webhooks.
