# Phone Recording Error "Invalid access token, does not contain scopes:\[\]."

**URL:** <https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562>\
**Category:** Phone\
**Tags:** api\
**Created:** [April 9, 2024, 8:27pm UTC](https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562 "2024-04-09T20:27:06Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![stephen1](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/stephen1/32/58074_2.png) [@stephen1](https://devforum.zoom.us/u/stephen1)\
**Post date:** [April 9, 2024, 8:27pm UTC](https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562/1 "2024-04-09T20:27:06Z")

</div>

**API Endpoint(s) and/or Zoom API Event(s)**  
[https://zoom.us/v2/phone/recording/download/{download\_url\_key}](https://zoom.us/v2/phone/recording/download/%7Bdownload_url_key%7D) given as the `download_url` when getting recordings from [https://zoom.us/v2/phone/recordings](https://zoom.us/v2/phone/recordings)

**Description**  
The scopes that are missing are blank in the error message.

**Error**  
{  
“code”: 104,  
“message”: “Invalid access token, does not contain scopes:.”  
}

**How To Reproduce**  
_Steps to reproduce the behavior:_

1. Request [https://zoom.us/v2/phone/recording/download/{download\_url\_key}](https://zoom.us/v2/phone/recording/download/%7Bdownload_url_key%7D) with bearer token.
2. Verify Bearer Token is correct for other endpoints
3. Get 401 listed above

---

<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:** [April 10, 2024, 2:20am UTC](https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562/2 "2024-04-10T02:20:52Z")

</div>

Hi @stephen1 , were there any scopes listed in the response?

Is this the first time you are seeing this behavior?

---

<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:** [April 10, 2024, 2:55am UTC](https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562/4 "2024-04-10T02:55:54Z")

</div>

I see this may be a bug from another user experiencing the same behavior. Can you please share the zm-tracking-id that you can see in the response headers from the request?

---

<div class="post-metadata">

**Author:** ![kdawgwilk-elephant](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/kdawgwilk-elephant/32/58503_2.png) [@kdawgwilk-elephant](https://devforum.zoom.us/u/kdawgwilk-elephant)\
**Post date:** [April 10, 2024, 5:54am UTC](https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562/5 "2024-04-10T05:54:25Z")

</div>

Here is one ifrom one of my requests that is seeing the same error WEB\_8a6df7bd76325898cc47d880a4be8a46

---

<div class="post-metadata">

**Author:** ![kdawgwilk-elephant](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/kdawgwilk-elephant/32/58503_2.png) [@kdawgwilk-elephant](https://devforum.zoom.us/u/kdawgwilk-elephant)\
**Post date:** [April 10, 2024, 5:54am UTC](https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562/6 "2024-04-10T05:54:59Z")

</div>

no the scopes are empty in the response `[]`

---

<div class="post-metadata">

**Author:** ![stephen1](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/stephen1/32/58074_2.png) [@stephen1](https://devforum.zoom.us/u/stephen1)\
**Post date:** [April 10, 2024, 6:06am UTC](https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562/7 "2024-04-10T06:06:08Z")

</div>

No scopes whatever. That is the issue.

---

<div class="post-metadata">

**Author:** ![stephen1](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/stephen1/32/58074_2.png) [@stephen1](https://devforum.zoom.us/u/stephen1)\
**Post date:** [April 10, 2024, 6:10am UTC](https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562/8 "2024-04-10T06:10:56Z")

</div>

Here is the tracking-id: WEB\_9b6f25301ede6b785cd214287c0eff35

---

<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:** [April 11, 2024, 3:16pm UTC](https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562/9 "2024-04-11T15:16:47Z")

</div>

@kdawgwilk-elephant @stephen1

There are two issues I’m observing:

1. Some people have the correct scopes enabled, but are getting this result when they’re calling the endpoint. See example below:  
[Unable to Download Zoom Phone Call Recording - Missing Blank [] Scopes](https://devforum.zoom.us/t/unable-to-download-zoom-phone-call-recording-missing-blank-scopes/107238)

2. Some people do not see scopes they’d need to enable on the app at all, but are still trying to access certain endpoint with a generated access token.

Which applies to you?

---

<div class="post-metadata">

**Author:** ![kdawgwilk-elephant](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/kdawgwilk-elephant/32/58503_2.png) [@kdawgwilk-elephant](https://devforum.zoom.us/u/kdawgwilk-elephant)\
**Post date:** [April 11, 2024, 3:53pm UTC](https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562/10 "2024-04-11T15:53:59Z")

</div>

I believe we are seeing both issues actually

---

<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:** [April 11, 2024, 4:03pm UTC](https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562/11 "2024-04-11T16:03:05Z")

</div>

Hi @kdawgwilk-elephant ,

Can you please provide the request/responses and tracking ids for scenario 1?

---

<div class="post-metadata">

**Author:** ![kdawgwilk-elephant](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/kdawgwilk-elephant/32/58503_2.png) [@kdawgwilk-elephant](https://devforum.zoom.us/u/kdawgwilk-elephant)\
**Post date:** [April 11, 2024, 4:41pm UTC](https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562/12 "2024-04-11T16:41:06Z")

</div>

Request URL: `https://zoom.us/v2/phone/recording/download/Sgzf8Z7SQ3y3HIh4yFlOdA`

Response Headers:

```auto
[
  {
    "key": "Date",
    "value": "Thu, 11 Apr 2024 16:34:49 GMT",
    "description": "A general header containing the date and time the message was sent.",
    "info": "A general header containing the date and time the message was sent."
  },
  {
    "key": "Content-Type",
    "value": "application/json",
    "description": "Indicates the resource's media type.",
    "info": "Indicates the resource's media type."
  },
  {
    "key": "Content-Length",
    "value": "74",
    "description": "An entity header indicating the size of the entity-body, in bytes.",
    "info": "An entity header indicating the size of the entity-body, in bytes."
  },
  {
    "key": "Connection",
    "value": "keep-alive",
    "description": "A general header specifying whether the current network connection will stay open once the current transaction finishes.",
    "info": "A general header specifying whether the current network connection will stay open once the current transaction finishes."
  },
  {
    "key": "x-zm-trackingid",
    "value": "WEB_3b2f343f34f1e2ca7649aa8714e2e5d7",
    "description": "Custom header",
    "info": "Custom header"
  },
  {
    "key": "x-zm-region",
    "value": "VA",
    "description": "Custom header",
    "info": "Custom header"
  },
  {
    "key": "vary",
    "value": "Origin",
    "description": "Determines how to match future request headers to decide whether the cached response can be used rather than requesting a fresh one.",
    "info": "Determines how to match future request headers to decide whether the cached response can be used rather than requesting a fresh one."
  },
  {
    "key": "vary",
    "value": "Access-Control-Request-Method",
    "description": "Determines how to match future request headers to decide whether the cached response can be used rather than requesting a fresh one.",
    "info": "Determines how to match future request headers to decide whether the cached response can be used rather than requesting a fresh one."
  },
  {
    "key": "vary",
    "value": "Access-Control-Request-Headers",
    "description": "Determines how to match future request headers to decide whether the cached response can be used rather than requesting a fresh one.",
    "info": "Determines how to match future request headers to decide whether the cached response can be used rather than requesting a fresh one."
  },
  {
    "key": "x-frame-options",
    "value": "deny",
    "description": "Used to avoid clickjacking attacks by making sure their content is not embedded into other sites.",
    "info": "Used to avoid clickjacking attacks by making sure their content is not embedded into other sites."
  },
  {
    "key": "strict-transport-security",
    "value": "max-age=31536000; includeSubDomains",
    "description": "Lets websites tell a browser that they should only be accessed via HTTPS.",
    "info": "Lets websites tell a browser that they should only be accessed via HTTPS."
  },
  {
    "key": "CF-Cache-Status",
    "value": "DYNAMIC",
    "description": "Custom header",
    "info": "Custom header"
  },
  {
    "key": "Report-To",
    "value": "{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=KYkcVyt6sg3oFYScyelRfzq3EX3pLzpl1KsNLdcR9xzwmiNREaTGUJZpRsyqGcQ7pQnrtIwhwG5vjIgXAP5n5o7prsRD3VH1KtSWk3MZsPsXwas8AKGdLLs%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}",
    "description": "Custom header",
    "info": "Custom header"
  },
  {
    "key": "NEL",
    "value": "{\"success_fraction\":0.01,\"report_to\":\"cf-nel\",\"max_age\":604800}",
    "description": "Custom header",
    "info": "Custom header"
  },
  {
    "key": "Server",
    "value": "cloudflare",
    "description": "Contains information about how the server handles requests.",
    "info": "Contains information about how the server handles requests."
  },
  {
    "key": "CF-RAY",
    "value": "872c62e01c221f44-DEN",
    "description": "Custom header",
    "info": "Custom header"
  },
  {
    "key": "alt-svc",
    "value": "h3=\":443\"; ma=86400",
    "description": "Custom header",
    "info": "Custom header"
  }
]

```

Response Body:

```auto
{"code":104,"message":"Invalid access token, does not contain scopes:[]."}

```

---

<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:** [April 15, 2024, 5:15pm UTC](https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562/14 "2024-04-15T17:15:54Z")

</div>

@kdawgwilk-elephant @stephen1 ,

The relevant team is working on a fix for the next API release (ZSEE-125372). Waiting for more details confirming all endpoints that will be resolved.

---

<div class="post-metadata">

**Author:** ![developmentjatheon](https://avatars.discourse-cdn.com/v4/letter/d/a183cd/32.png) [@developmentjatheon](https://devforum.zoom.us/u/developmentjatheon)\
**Post date:** [May 7, 2024, 8:52am UTC](https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562/15 "2024-05-07T08:52:44Z")

</div>

Hello, Zoom team.  
I have a question related to this matter. I was able to download Zoom Phone recording using API endpoint and access token generated with Server-To-Server OAuth flow (using Server-To-Server App type). However, I wonder if it is possible to acquire recordings from other Zoom accounts (I’m not sure if Server-To-Server OAuth App can be authorized by other accounts’ admins to enable retrieving theirs recordings) ? If so, would Server-To-Server token be valid for such retrieval ?

---

<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 8, 2024, 2:36pm UTC](https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562/16 "2024-05-08T14:36:58Z")

</div>

> [@gianni.zoom](#):
>
> (ZSEE-125372

Devs still working on this (ZOOM-709449).

---

<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 8, 2024, 2:37pm UTC](https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562/17 "2024-05-08T14:37:58Z")

</div>

Hi @developmentjatheon ,

> [@developmentjatheon](#):
>
> However, I wonder if it is possible to acquire recordings from other Zoom accounts (I’m not sure if Server-To-Server OAuth App can be authorized by other accounts’ admins to enable retrieving theirs recordings) ? If so, would Server-To-Server token be valid for such retrieval ?

No Server-to-Server OAuth is an internal app type and cannot access external data. You have to use standard OAuth app type.

---

<div class="post-metadata">

**Author:** ![Kim3](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/kim3/32/70965_2.png) [@Kim3](https://devforum.zoom.us/u/Kim3)\
**Post date:** [October 8, 2025, 2:56pm UTC](https://devforum.zoom.us/t/phone-recording-error-invalid-access-token-does-not-contain-scopes/107562/18 "2025-10-08T14:56:54Z")

</div>

Hi, I am also experiencing similar issue when calling this [https://zoom.us/v2/phone/recording/download/{download\_url\_key}](https://zoom.us/v2/phone/recording/download/%7Bdownload_url_key%7D) given as the `download_url` to get recordings from [https://zoom.us/v2/phone/recordings](https://zoom.us/v2/phone/recordings), the scopes are indicated in the error message but we have already configured the scopes in zoom marketplace,

this is what we are seeing:

{“code”:104,“message”:“Invalid access token, does not contain scopes:[phone:read:call\_recording:admin, phone:read:call\_recording].”}
