# Impossible to paginate through GET/users with parameter "next\_page\_token"

**URL:** <https://devforum.zoom.us/t/impossible-to-paginate-through-get-users-with-parameter-next-page-token/86823>\
**Category:** API and Webhooks\
**Tags:** api\
**Created:** [April 17, 2023, 2:13pm UTC](https://devforum.zoom.us/t/impossible-to-paginate-through-get-users-with-parameter-next-page-token/86823 "2023-04-17T14:13:56Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![bwayan75](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/bwayan75/32/47564_2.png) [@bwayan75](https://devforum.zoom.us/u/bwayan75)\
**Post date:** [April 17, 2023, 2:13pm UTC](https://devforum.zoom.us/t/impossible-to-paginate-through-get-users-with-parameter-next-page-token/86823/1 "2023-04-17T14:13:57Z")

</div>

Hello

I am building an OAuth for my users so they can get the list of users which have a license per country.  
I am running the code below, it is working fine to reach page 1 and 2, but I am not able to reach page 3 to 7.

I have launched debug in Pycharm, but I have been with my head in the code for hours…

```auto
def get_users(access_token):
    headers = {
        'Authorization': f'Bearer {access_token}',
        'Content-Type': 'application/json'
    }
    URL_USERS = "https://api.zoom.us/v2/users?status=active&page_size=300"
    next_page_token = ""
    page_number = 1
    users_per_location = {}
    while True:
        if next_page_token:
            params = {'page_token': next_page_token, "page_number": page_number}
            response = requests.get(URL_USERS, headers=headers, params=params)
        else:
            response = requests.get(URL_USERS, headers=headers)
        page_number += 1
        response_json = response.json()
        for user in response_json['users']:
            if user['type'] == 2:
                try:
                    if user['timezone'].split("/")[1] in users_per_location:
                        users_per_location[user['timezone'].split("/")[1]] += 1
                    else:
                        users_per_location[user['timezone'].split("/")[1]] = 1
                except IndexError:
                    pass
        if 'next_page_token' in response_json:
            next_page_token = response_json['next_page_token']
        else:
            break
    print(users_per_location)
    return users_per_location

```

I have checked some other posts in this forum, and Zoom devs took example where they dont use “page\_number” in parameters (but in my case it prevents me from breaking the while loop)

> [@Handling paginated responses from the Zoom API](https://devforum.zoom.us/t/handling-paginated-responses-from-the-zoom-api/68825):
>
> When an API response contains more data than can be returned in a single page, the API will return with a token to request the next page of results. But how will you expect to receive a paginated response? If your response contains a next page token, make the same request again using that token as a query parameter. Say you have 70 users on your account, as in, more than the default page size of 30. A request to the list users will initially respond with 30 users. To get the full list, you’ll …

Any thoughts?

---

<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:** [April 18, 2023, 1:44pm UTC](https://devforum.zoom.us/t/impossible-to-paginate-through-get-users-with-parameter-next-page-token/86823/2 "2023-04-18T13:44:51Z")

</div>

Hi @bwayan75  
Thanks for reaching out!  
If I am understanding correctly, you are not able to paginate through GET/users endpoint, using the next\_page\_token parameter?

---

<div class="post-metadata">

**Author:** ![MultiplayerSession](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/multiplayersession/32/66446_2.png) [@MultiplayerSession](https://devforum.zoom.us/u/MultiplayerSession)\
**Post date:** [April 18, 2023, 1:50pm UTC](https://devforum.zoom.us/t/impossible-to-paginate-through-get-users-with-parameter-next-page-token/86823/3 "2023-04-18T13:50:54Z")

</div>

Make sure that your parameter names match what Zoom expects to receive. The [List users](https://developers.zoom.us/docs/api/rest/reference/zoom-api/methods/#operation/users) endpoint is documented as expecting the parameter name `next_page_token`, not `page_token`, so this line is suspicious:

> [@bwayan75](#):
>
> `params = {'page_token': next_page_token, "page_number": page_number}`

---

<div class="post-metadata">

**Author:** ![bwayan75](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/bwayan75/32/47564_2.png) [@bwayan75](https://devforum.zoom.us/u/bwayan75)\
**Post date:** [April 19, 2023, 8:17am UTC](https://devforum.zoom.us/t/impossible-to-paginate-through-get-users-with-parameter-next-page-token/86823/4 "2023-04-19T08:17:50Z")

</div>

Hello guys

I managed to make things work like this

```auto
    params = {
        "status": "active",
        "page_size": 300,
        "next_page_token": args[0] if args else ""
    }

```

And having in my function a \*args as parameter `def connect_with_tokens(access_token, *args):`

This is solved

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/3X/6/1/614bdd549b610bbaa46ff934617683a02bdaa03c.png) [@system](https://devforum.zoom.us/u/system)\
**Post date:** [April 21, 2024, 11:53pm UTC](https://devforum.zoom.us/t/impossible-to-paginate-through-get-users-with-parameter-next-page-token/86823/5 "2024-04-21T23:53:52Z")

</div>

Closed on April 21, 2024, 11:53pm UTC

This topic was automatically closed 368 days after the last reply. New replies are no longer allowed.
