# Reg: Need help in creating users through oauth v2 API

**URL:** <https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395>\
**Category:** API and Webhooks\
**Created:** [June 6, 2024, 4:49am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395 "2024-06-06T04:49:27Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![anjibabuch987](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/anjibabuch987/32/52093_2.png) [@anjibabuch987](https://devforum.zoom.us/u/anjibabuch987)\
**Post date:** [June 6, 2024, 4:49am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/1 "2024-06-06T04:49:27Z")

</div>

Hi Team,

Good Morning…!,

We are trying to integrate zoom API with oauth v2 to creating users in zoom with access token.

Error:

{  
“error”: “This API does not support client credentials for authorization.”  
}

My Zoom account: [anjibabuch987@gmail.com](mailto:anjibabuch987@gmail.com)

Step: 1 Created app and enabled oauth2 , scopes(admin create user).

Step2: Generated access token with client credentials.

Code:  
uri = URI(‘[https://zoom.us/oauth/token](https://zoom.us/oauth/token)’)  
params = { grant\_type: ‘client\_credentials’, client\_id: “”, client\_secret: “” }  
response = Net::HTTP.post(uri, URI.encode\_www\_form(params))  
data = JSON.parse(response.body)

Step3: With access token trying to create user(url: ) it’s getting above error.

Code:  
uri = URI(‘[https://api.zoom.us/v2/users](https://api.zoom.us/v2/users)’)  
request = Net::HTTP::Post.new(uri)  
request.content\_type = ‘application/json’  
request[‘Authorization’] = “Bearer #{access\_token}”  
request.body = {  
action: ‘create’,  
user\_info: {  
email: user\_params[:email],  
type: user\_params[:type],  
first\_name: user\_params[:first\_name],  
last\_name: user\_params[:last\_name],  
password: user\_params[:password]  
}  
}.to\_json

```
  response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
    http.request(request)
  end
  JSON.parse(response.body)

```

Can you please help us to resolve this issue.

Please let me know if you need any information my side.

Thanks  
Anjibabu Ch

---

<div class="post-metadata">

**Author:** ![chunsiong.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/chunsiong.zoom/32/35488_2.png) [@chunsiong.zoom](https://devforum.zoom.us/u/chunsiong.zoom)\
**Post date:** [June 6, 2024, 6:37am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/2 "2024-06-06T06:37:20Z")

</div>

@anjibabuch987 what programming language are you using?

---

<div class="post-metadata">

**Author:** ![anjibabuch987](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/anjibabuch987/32/52093_2.png) [@anjibabuch987](https://devforum.zoom.us/u/anjibabuch987)\
**Post date:** [June 6, 2024, 8:00am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/3 "2024-06-06T08:00:25Z")

</div>

@chunsiong.zoom ruby on rails I am a back end developer

---

<div class="post-metadata">

**Author:** ![anjibabuch987](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/anjibabuch987/32/52093_2.png) [@anjibabuch987](https://devforum.zoom.us/u/anjibabuch987)\
**Post date:** [June 7, 2024, 5:31am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/4 "2024-06-07T05:31:12Z")

</div>

Hi @chunsiong.zoom It’s very urgent please help me on this issue

---

<div class="post-metadata">

**Author:** ![chunsiong.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/chunsiong.zoom/32/35488_2.png) [@chunsiong.zoom](https://devforum.zoom.us/u/chunsiong.zoom)\
**Post date:** [June 10, 2024, 4:00am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/5 "2024-06-10T04:00:05Z")

</div>

@anjibabuch987 I don’t have sample code in RoR, but did you try this out on Postman btw?

---

<div class="post-metadata">

**Author:** ![anjibabuch987](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/anjibabuch987/32/52093_2.png) [@anjibabuch987](https://devforum.zoom.us/u/anjibabuch987)\
**Post date:** [June 10, 2024, 4:05am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/6 "2024-06-10T04:05:45Z")

</div>

@chunsiong.zoom Yes tried but every time getting access token issue.  
{  
“error”: “This API does not support client credentials for authorization.”  
}

---

<div class="post-metadata">

**Author:** ![chunsiong.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/chunsiong.zoom/32/35488_2.png) [@chunsiong.zoom](https://devforum.zoom.us/u/chunsiong.zoom)\
**Post date:** [June 10, 2024, 4:19am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/7 "2024-06-10T04:19:27Z")

</div>

@anjibabuch987

the closest i have are python based sample

here’s how to use get access token using OAuth

```auto
    from flask import Flask, request, jsonify
        import base64
        import requests
        import urllib.parse # Import the urllib module for URL encoding
        
        def handle_redirect_url_data_request(path, oauth_client_id, oauth_client_secret, code):
            print ("handle_redirect_url_data_request")
            url = f"https://zoom.us/oauth/token"
            redirect_uri=f"https://python.asdc.cc/{path}"
            print (redirect_uri)
            
            # Encode the client ID and client secret
            credentials = f"{oauth_client_id}:{oauth_client_secret}"
            credentials_encoded = base64.b64encode(credentials.encode()).decode('utf-8')
        
            headers = {
                'Authorization': f'Basic {credentials_encoded}',
                'Content-Type': 'application/x-www-form-urlencoded',
               
            }
            print (credentials_encoded)
        
            data = {
                'grant_type': 'authorization_code',
                'redirect_uri': redirect_uri,
                'code': code
            }
            # Encode the data dictionary as x-www-form-urlencoded
            data_encoded = urllib.parse.urlencode(data).encode('utf-8')
        
        
            response = requests.post(url, data=data_encoded, headers=headers)
            # Check the HTTP status code before parsing as JSON
            if response.status_code == 200:
               print ("response 200")
               response_json = response.json()
               print(response_json)
               return response_json, 200 # Return JSON response with 200 status code
            else:
                
                # Handle the case where the response has an error status code
                return "Error: " + str(response.status_code), response.status_code
        

```

---

<div class="post-metadata">

**Author:** ![anjibabuch987](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/anjibabuch987/32/52093_2.png) [@anjibabuch987](https://devforum.zoom.us/u/anjibabuch987)\
**Post date:** [June 11, 2024, 4:25am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/8 "2024-06-11T04:25:04Z")

</div>

@chunsiong.zoom I have converted to ruby code what you have given python code.

require ‘base64’  
require ‘net/http’  
require ‘uri’  
require ‘json’

def handle\_redirect\_url\_data\_request(path, oauth\_client\_id, oauth\_client\_secret, code)  
puts “handle\_redirect\_url\_data\_request”  
url = “[https://zoom.us/oauth/token](https://zoom.us/oauth/token)”  
redirect\_uri = “[Python Sample code for Zoom Meeting SDK, Zoom OAuth App, Webhooks and REST API](https://python.asdc.cc/#%7Bpath%7D)”  
puts redirect\_uri  
oauth\_client\_id = “aWPH2JfjTIS5gEuv85sDrA”  
oauth\_client\_secret = “A0okV2mFTze6nkUxi7y2KmDf8jD8HVsd”

credentials = “#{oauth\_client\_id}:#{oauth\_client\_secret}”  
credentials\_encoded = Base64.encode64(credentials).strip

headers = {  
‘Authorization’ =\> “Basic #{credentials\_encoded}”,  
‘Content-Type’ =\> ‘application/x-www-form-urlencoded’  
}

puts credentials\_encoded

data = {  
‘grant\_type’ =\> ‘authorization\_code’,  
‘redirect\_uri’ =\> redirect\_uri,  
‘code’ =\> code  
}

data\_encoded = URI.encode\_www\_form(data)

uri = URI(url)  
http = Net::HTTP.new(uri.host, uri.port)  
http.use\_ssl = true

request = Net::HTTP::Post.new(uri.path, headers)  
request.body = data\_encoded

response = http.request(request)

if response.code == “200”  
puts “response 200”  
response\_json = JSON.parse(response.body)  
puts response\_json  
return response\_json, 200 # Return JSON response with 200 status code  
else  
return "Error: " + response.code, response.code.to\_i

end  
end  
handle\_redirect\_url\_data\_request(“/”, “aWPH2JfjTIS5gEuv85sDrA”, “A0okV2mFTze6nkUxi7y2KmDf8jD8HVsd”, “15Z4khKkwTdEgSFScKcTuK3Vd67ZpBgkw”)

getting this error please help me  
handle\_redirect\_url\_data\_request(“/”, “aWPH2JfjTIS5gEuv85sDrA”, “A0okV2mFTze6nkUxi7y2KmDf8jD8HVsd”, “15Z4khKkwTdEgSFScKcTuK3Vd67ZpBgkw”)  
handle\_redirect\_url\_data\_request  
[https://python.asdc.cc//](https://python.asdc.cc//)  
YVdQSDJKZmpUSVM1Z0V1djg1c0RyQTpBMG9rVjJtRlR6ZTZua1V4aTd5Mktt  
RGY4akQ4SFZzZA==  
Traceback (most recent call last):  
3: from (irb):111  
2: from (irb):96:in `handle_redirect_url_data_request' 1: from (irb):96:in `new’  
ArgumentError (header Authorization has field value “Basic YVdQSDJKZmpUSVM1Z0V1djg1c0RyQTpBMG9rVjJtRlR6ZTZua1V4aTd5Mktt\nRGY4akQ4SFZzZA==”, this cannot include CR/LF)

---

<div class="post-metadata">

**Author:** ![chunsiong.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/chunsiong.zoom/32/35488_2.png) [@chunsiong.zoom](https://devforum.zoom.us/u/chunsiong.zoom)\
**Post date:** [June 11, 2024, 6:23am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/9 "2024-06-11T06:23:59Z")

</div>

@anjibabuch987 you are using my redirect URL, it will not work. You have to use your own redirect URL.

And how did you convert this btw?

---

<div class="post-metadata">

**Author:** ![anjibabuch987](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/anjibabuch987/32/52093_2.png) [@anjibabuch987](https://devforum.zoom.us/u/anjibabuch987)\
**Post date:** [June 12, 2024, 3:49am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/10 "2024-06-12T03:49:25Z")

</div>

@chunsiong.zoom I have used on my URL which is configured for application but it still same error.

require ‘base64’  
require ‘net/http’  
require ‘uri’  
require ‘json’

def handle\_redirect\_url\_data\_request(path, oauth\_client\_id, oauth\_client\_secret, code)  
puts “handle\_redirect\_url\_data\_request”  
url = “[https://zoom.us/oauth/token](https://zoom.us/oauth/token)”  
redirect\_uri = “[https://oauth.pstmn.io/v1/callback](https://oauth.pstmn.io/v1/callback)”  
puts redirect\_uri  
oauth\_client\_id = “aWPH2JfjTIS5gEuv85sDrA”  
oauth\_client\_secret = “A0okV2mFTze6nkUxi7y2KmDf8jD8HVsd”

credentials = “#{oauth\_client\_id}:#{oauth\_client\_secret}”  
credentials\_encoded = Base64.encode64(credentials).strip

headers = {  
‘Authorization’ =\> “Basic #{credentials\_encoded}”,  
‘Content-Type’ =\> ‘application/x-www-form-urlencoded’  
}

puts credentials\_encoded

data = {  
‘grant\_type’ =\> ‘authorization\_code’,  
‘redirect\_uri’ =\> redirect\_uri,  
‘code’ =\> code  
}

data\_encoded = URI.encode\_www\_form(data)

uri = URI(url)  
http = Net::HTTP.new(uri.host, uri.port)  
http.use\_ssl = true

request = Net::HTTP::Post.new(uri.path, headers)  
request.body = data\_encoded

response = http.request(request)

if response.code == “200”  
puts “response 200”  
response\_json = JSON.parse(response.body)  
puts response\_json  
return response\_json, 200 # Return JSON response with 200 status code  
else  
return "Error: " + response.code, response.code.to\_i

end  
end  
handle\_redirect\_url\_data\_request(“/”, “irb(main):204:0\> handle\_redirect\_url\_data\_request(”/", “aWPH2JfjTIS5gEuv85sDrA”, “A0okV2mFTze6nkUxi7y2KmDf8jD8HVsd”, “15Z4khKkwTdEgSFScKcTuK3Vd67ZpBgkw”)  
handle\_redirect\_url\_data\_request  
[https://oauth.pstmn.io/v1/callback](https://oauth.pstmn.io/v1/callback)  
YVdQSDJKZmpUSVM1Z0V1djg1c0RyQTpBMG9rVjJtRlR6ZTZua1V4aTd5Mktt  
RGY4akQ4SFZzZA==  
Traceback (most recent call last):  
3: from (irb):204  
2: from (irb):189:in `handle_redirect_url_data_request' 1: from (irb):189:in `new’  
ArgumentError (header Authorization has field value “Basic YVdQSDJKZmpUSVM1Z0V1djg1c0RyQTpBMG9rVjJtRlR6ZTZua1V4aTd5Mktt\nRGY4akQ4SFZzZA==”, this cannot include CR/LF)  
", “A0okV2mFTze6nkUxi7y2KmDf8jD8HVsd”, “15Z4khKkwTdEgSFScKcTuK3Vd67ZpBgkw”)

getting error:

Please help me on this issue.  
I Know python and ruby i done the coding.

---

<div class="post-metadata">

**Author:** ![chunsiong.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/chunsiong.zoom/32/35488_2.png) [@chunsiong.zoom](https://devforum.zoom.us/u/chunsiong.zoom)\
**Post date:** [June 12, 2024, 6:59am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/11 "2024-06-12T06:59:02Z")

</div>

@anjibabuch987 for hygiene coding purpose, could you check if the quotes are all in " and not “”

I’m not exactly sure why there is complain about line feed / carrier, it might be a quote thing

---

<div class="post-metadata">

**Author:** ![anjibabuch987](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/anjibabuch987/32/52093_2.png) [@anjibabuch987](https://devforum.zoom.us/u/anjibabuch987)\
**Post date:** [June 19, 2024, 4:30am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/12 "2024-06-19T04:30:18Z")

</div>

Hi @chunsiong.zoom I am trying with access token of creating a user it’s getting below error.

ruby code:  
access\_token=“eyJzdiI6IjAwMDAwMSIsImFsZyI6IkhTNTEyIiwidiI6IjIuMCIsImtpZCI6IjA3NjY1MzQ3LTI4Y2YtNDcyMC05OTYyLWMxNTcxMjQ0MjlhYiJ9.eyJ2ZXIiOjksImF1aWQiOiJkMmM3MDE3MmM3N2Y0MzhmYmMzMTE3MGIxMTUyYzk5OCIsImNvZGUiOiJudVVudld1WlpjeTJEQk41WjdHVHVXVU1NNm5DVWxQUEEiLCJpc3MiOiJ6bTpjaWQ6YVdQSDJKZmpUSVM1Z0V1djg1c0RyQSIsImdubyI6MCwidHlwZSI6MCwidGlkIjowLCJhdWQiOiJodHRwczovL29hdXRoLnpvb20udXMiLCJ1aWQiOiJ5QTg0RDJZV1FNLUFFM2VFV1paZ3B3IiwibmJmIjoxNzE4NzcxMTE5LCJleHAiOjE3MTg3NzQ3MTksImlhdCI6MTcxODc3MTExOSwiYWlkIjoiTTFxLVM2Rl9UR3VkaXB3aDFiejZ1USJ9.BuWBRB7kM7f8nesOPEVNwZ4PtyiW7qr9vYnR0vXGsWYwNzzrFrhyYAIRM9x\_-ZbLcC9l3oDgXx5wMUWJnkwMxQ” # Make sure to replace this with your actual access token  
zoom\_create\_user\_url = ‘[https://api.zoom.us/v2/users](https://api.zoom.us/v2/users)’

```
user_info = {
  action: 'create',
  user_info: {
    email: 'user@example.com',
    type: 1, # 1 is Basic, 2 is Licensed, 3 is On-prem
    first_name: 'John',
    last_name: 'Doe'
  }
}

uri = URI.parse(zoom_create_user_url)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri.request_uri, {
  'Authorization' => "Bearer #{access_token}",
  'Content-Type' => 'application/json'
})
request.body = user_info.to_json

response = http.request(request)

p JSON.parse(response.body)

```

end

error:  
=\> {“code”=\>200, “message”=\>“No privilege.”}

My zoom app name - General app 740  
please help me resolve.

---

<div class="post-metadata">

**Author:** ![chunsiong.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/chunsiong.zoom/32/35488_2.png) [@chunsiong.zoom](https://devforum.zoom.us/u/chunsiong.zoom)\
**Post date:** [June 19, 2024, 4:43am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/13 "2024-06-19T04:43:39Z")

</div>

@anjibabuch987 did you add the create user scope for this oauth app?

---

<div class="post-metadata">

**Author:** ![anjibabuch987](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/anjibabuch987/32/52093_2.png) [@anjibabuch987](https://devforum.zoom.us/u/anjibabuch987)\
**Post date:** [June 19, 2024, 5:04am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/14 "2024-06-19T05:04:55Z")

</div>

yes @chunsiong.zoom I have added all below scopes for oauth app purpose but getting error  
=\> {“code”=\>200, “message”=\>“No privilege.”}

I have added this scopes:  
“scope”=\>“user:read:list\_users:admin user:write:user:admin user:read:user:admin user:delete:user:admin user:update:password:admin user:read:list\_assistants:admin user:delete:assistant:admin user:read:token:admin user:read:zak:admin user:delete:token:admin user:read:list\_permissions:admin user:read:list\_schedulers:admin user:delete:scheduler:admin user:update:email:admin user:read:email:admin user:read:pm\_room:admin user:read:settings:admin user:delete:virtual\_background\_files:admin user:read:summary:admin user:read:list\_collaboration\_devices:admin user:read:collaboration\_device:admin user:update:user\_account:admin user:read:presence\_status:admin user:read:personal\_note:admin user:read:list\_users:master user:write:user:master user:read:user:master user:update:user:master user:delete:user:master user:update:status:master user:update:password:master user:read:list\_assistants:master user:write:assistant:master user:delete:assistant:master user:write:profile\_picture:master user:read:token:master user:delete:token:master user:read:list\_permissions:master user:read:list\_schedulers:master user:delete:scheduler:master user:update:email:master user:update:presence\_status:master user:read:settings:master user:update:settings:master user:write:virtual\_background\_files:master user:delete:virtual\_background\_files:master user:read:summary:master user:write:feature:master user:update:user\_account:master user:read:presence\_status:master user:read:personal\_note:master”

please help me on this issue very urgent

---

<div class="post-metadata">

**Author:** ![chunsiong.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/chunsiong.zoom/32/35488_2.png) [@chunsiong.zoom](https://devforum.zoom.us/u/chunsiong.zoom)\
**Post date:** [June 19, 2024, 6:22am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/15 "2024-06-19T06:22:25Z")

</div>

@anjibabuch987 I’m not entirely sure whats wrong, but here’s a sample code in python for creating meeting. You can just change the json payload and the URL endpoint to create user.

```auto
      from flask import Flask, request
      import requests
      import json
      
      app = Flask( __name__ )
      
      def handle_callapi():
          # Fetch access_token from query string
          access_token = request.args.get('access_token')
      
          # Meeting data
          meeting_data = {
              "topic": 'hello world',
              "type": 2,
              "start_time": "2023-10-01T10:00:00Z",
              "duration": 120,
              "password": "12345678",
              "agenda": "40 mins limit demonstration",
              "pre_schedule": False,
              "timezone": "Asia/Singapore",
              "default_password": False
          }
      
          # Zoom API endpoint
          api_url = 'https://api.zoom.us/v2/users/me/meetings'
      
          # Headers for the request
          headers = {
              "Authorization": f"Bearer {access_token}",
              "Content-Type": "application/json",
              "Accept": "application/json"
          }
      
          # Send POST request to create meeting
          response = requests.post(api_url, headers=headers, data=json.dumps(meeting_data))
      
          # Return response
          return "Meeting Details: " + response.text
      

```

Btw you are using the credentials in the development tab right?

---

<div class="post-metadata">

**Author:** ![anjibabuch987](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/anjibabuch987/32/52093_2.png) [@anjibabuch987](https://devforum.zoom.us/u/anjibabuch987)\
**Post date:** [June 19, 2024, 2:44pm UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/16 "2024-06-19T14:44:40Z")

</div>

Hi @chunsiong.zoom I have created same for user creation but it’s giving same error

code:

```auto
require 'base64'
require 'net/http'
require 'uri'
require 'json'

def handle_redirect_url_data_request(oauth_client_id, oauth_client_secret, code)
  url = "https://zoom.us/oauth/token"
  redirect_uri = "https://oauth.pstmn.io/v1/callback"

  credentials = "#{oauth_client_id}:#{oauth_client_secret}"
  credentials_encoded = Base64.strict_encode64(credentials)

  headers = {
    'Authorization' => "Basic #{credentials_encoded}",
    'Content-Type' => 'application/x-www-form-urlencoded'
  }

  data = {
    'grant_type' => 'authorization_code',
    'redirect_uri' => redirect_uri,
    'code' => code
  }

  data_encoded = URI.encode_www_form(data)

  uri = URI(url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true

  request = Net::HTTP::Post.new(uri.path, headers)
  request.body = data_encoded

  response = http.request(request)

  if response.code == "200"
    response_json = JSON.parse(response.body)
    return response_json, 200 # Return JSON response with 200 status code
  else
    puts "Failed to obtain access token."
    puts "Response Code: #{response.code}"
    puts "Response Body: #{response.body}"
    return "Error: " + response.code, response.code.to_i
  end
end

def create_zoom_user(access_token)
  uri = URI.parse("https://api.zoom.us/v2/users")
  request = Net::HTTP::Post.new(uri)
  request.content_type = "application/json"
  request["Authorization"] = "Bearer #{access_token}"
  request.body = JSON.dump({
      action: 'create',
      user_info: {
        email: 'user@example.com',
        type: 1, # 1 is Basic, 2 is Licensed, 3 is On-prem
        first_name: 'John',
        last_name: 'Doe'
      }
    })

  req_options = {
    use_ssl: uri.scheme == "https",
  }

  response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
    http.request(request)
  end

  if response.code == "201"
    puts "Meeting created successfully"
    puts response.body
  else
    puts "Failed to create meeting: #{response.code} #{response.message}"
    puts "Response body: #{response.body}"
  end
end

```

# Replace these values with the correct ones

oauth\_client\_id = “aWPH2JfjTIS5gEuv85sDrA”  
oauth\_client\_secret = “A0okV2mFTze6nkUxi7y2KmDf8jD8HVsd”  
authorization\_code = “DIjvaD65f2FVJLzbeaeT4CBs7tFUXkQdw”

token\_response, status = handle\_redirect\_url\_data\_request(oauth\_client\_id, oauth\_client\_secret, authorization\_code)

if status == 200  
access\_token = token\_response[“access\_token”]  
puts “Access Token: #{access\_token}”

# Use the access token to create a Zoom meeting

create\_zoom\_user(access\_token)  
else  
puts “Failed to obtain access token.”  
end

error:  
Failed to create meeting: 400 Bad Request  
Response body: {“code”:200,“message”:“No privilege.”}  
=\> nil

NOTE - Create meetings are working fine your code but i need to create users

please help me on this issue.

---

<div class="post-metadata">

**Author:** ![anjibabuch987](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/anjibabuch987/32/52093_2.png) [@anjibabuch987](https://devforum.zoom.us/u/anjibabuch987)\
**Post date:** [June 21, 2024, 8:37am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/17 "2024-06-21T08:37:37Z")

</div>

Hi @chunsiong.zoom Please have a look help me on this issue it’s very urgent

---

<div class="post-metadata">

**Author:** ![chunsiong.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/chunsiong.zoom/32/35488_2.png) [@chunsiong.zoom](https://devforum.zoom.us/u/chunsiong.zoom)\
**Post date:** [June 21, 2024, 8:53am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/18 "2024-06-21T08:53:03Z")

</div>

@anjibabuch987

Sorry for the delay in response. If you need urgent help, I would strongly encourage you to look at paid developer support.

Please ensure that the authorization code is only used once. It is only valid once.

The current issue is that you have problem creating users?

Can you try with this payload?

{  
“action”: “create”,  
“user\_info”: {  
“email”: “[tanchunsiong+msdk+test@gmail.com](mailto:tanchunsiong+msdk+test@gmail.com)”,  
“type”: 1,  
“first\_name”: “ChunSiong”,  
“last\_name”: “Tan”,  
“password”: “P@ssw0rd223445”  
}  
}

---

<div class="post-metadata">

**Author:** ![anjibabuch987](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/anjibabuch987/32/52093_2.png) [@anjibabuch987](https://devforum.zoom.us/u/anjibabuch987)\
**Post date:** [June 21, 2024, 9:33am UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/20 "2024-06-21T09:33:52Z")

</div>

HI @chunsiong.zoom I have tried your code but every time giving error only also i checked multiple times.

code:

require ‘base64’  
require ‘net/http’  
require ‘uri’  
require ‘json’

def handle\_redirect\_url\_data\_request(oauth\_client\_id, oauth\_client\_secret, code)  
url = “[https://zoom.us/oauth/token](https://zoom.us/oauth/token)”  
redirect\_uri = “[https://oauth.pstmn.io/v1/callback](https://oauth.pstmn.io/v1/callback)”

credentials = “#{oauth\_client\_id}:#{oauth\_client\_secret}”  
credentials\_encoded = Base64.strict\_encode64(credentials)

headers = {  
‘Authorization’ =\> “Basic #{credentials\_encoded}”,  
‘Content-Type’ =\> ‘application/x-www-form-urlencoded’  
}

data = {  
‘grant\_type’ =\> ‘authorization\_code’,  
‘redirect\_uri’ =\> redirect\_uri,  
‘code’ =\> code  
}

data\_encoded = URI.encode\_www\_form(data)

uri = URI(url)  
http = Net::HTTP.new(uri.host, uri.port)  
http.use\_ssl = true

request = Net::HTTP::Post.new(uri.path, headers)  
request.body = data\_encoded

response = http.request(request)

if response.code == “200”  
response\_json = JSON.parse(response.body)  
return response\_json, 200 # Return JSON response with 200 status code  
else  
puts “Failed to obtain access token.”  
puts “Response Code: #{response.code}”  
puts “Response Body: #{response.body}”  
return "Error: " + response.code, response.code.to\_i  
end  
end

def create\_zoom\_user(access\_token)  
uri = URI.parse(“[https://api.zoom.us/v2/users](https://api.zoom.us/v2/users)”)  
request = Net::HTTP::Post.new(uri)  
request.content\_type = “application/json”  
request[“Authorization”] = “Bearer #{access\_token}”  
request.body = JSON.dump({  
action: “create”,  
user\_info: {  
email: “[tanchunsiong+msdk+test@gmail.com](mailto:tanchunsiong+msdk+test@gmail.com)”,  
type: 1,  
first\_name: “ChunSiong”,  
last\_name: “Tan”,  
password: “P@ssw0rd223445”  
}  
})

req\_options = {  
use\_ssl: uri.scheme == “https”,  
}

response = Net::HTTP.start(uri.hostname, uri.port, req\_options) do |http|  
http.request(request)  
end

if response.code == “201”  
puts “User created successfully”  
puts response.body  
else  
puts “Failed to create user: #{response.code} #{response.message}”  
puts “Response body: #{response.body}”  
if response.body.include?(‘No privilege’)  
puts “The authenticated user does not have the required permissions.”  
puts “Ensure the user has admin rights and the OAuth app has the user:write:admin scope.”  
end  
end  
end

# Replace these values with the correct ones

oauth\_client\_id = “aWPH2JfjTIS5gEuv85sDrA”  
oauth\_client\_secret = “A0okV2mFTze6nkUxi7y2KmDf8jD8HVsd”  
authorization\_code = “8Im0r2asa47DYZoWln0QYeEOUIh8bqmJw”

token\_response, status = handle\_redirect\_url\_data\_request(oauth\_client\_id, oauth\_client\_secret, authorization\_code)

if status == 200  
access\_token = token\_response[“access\_token”]  
puts “Access Token: #{access\_token}”

# Use the access token to create a Zoom user

create\_zoom\_user(access\_token)  
else  
puts “Failed to obtain access token.”  
end

# ===== Error: Failed to create user: 400 Bad Request Response body: {“code”:200,“message”:“No privilege.”} The authenticated user does not have the required permissions. Ensure the user has admin rights and the OAuth app has the user:write:admin scope. =\> nil

also I have added this scopes:

Meeting

meeting:write:meeting:master, meeting:write:meeting:admin

User

user:update:user:master, user:update:user\_account:admin, user:delete:token:master, user:write:user:master, user:update:password:admin, user:read:summary:master, user:read:user:master, user:delete:assistant:admin, user:delete:scheduler:master, user:read:list\_users:admin, user:update:settings:master, user:delete:scheduler:admin, user:delete:user:admin, user:read:list\_users:master, user:read:personal\_note:admin, user:read:settings:master, user:update:presence\_status:master, user:read:list\_permissions:admin, user:read:presence\_status:master, user:read:list\_schedulers:master, user:read:presence\_status:admin, user:read:list\_assistants:master, user:read:list\_schedulers:admin, user:read:personal\_note:master, user:read:list\_permissions:master, user:read:pm\_room:admin, user:write:virtual\_background\_files:master, user:delete:virtual\_background\_files:admin, user:read:list\_collaboration\_devices:admin, user:read:collaboration\_device:admin, user:delete:assistant:master, user:read:zak:admin, user:update:user\_account:master, user:update:password:master, user:read:token:admin, user:update:email:master, user:write:assistant:master, user:write:profile\_picture:master, user:delete:token:admin, user:read:token:master, user:read:settings:admin, user:read:user:admin, user:read:email:admin, user:update:status:master, user:read:list\_assistants:admin, user:update:email:admin, user:delete:user:master, user:delete:virtual\_background\_files:master, user:write:feature:master, user:read:summary:admin, user:write:user:admin, user:update:presence\_status:admin, user:write:feature:admin, user:update:status:admin, user:write:virtual\_background\_files:admin, user:update:settings:admin, user:write:profile\_picture:admin, user:write:assistant:admin, user:update:user:admin, user:delete:profile\_picture:admin

Contact center

contact\_center:delete:inbox\_user:admin, contact\_center:write:inbox\_user:admin, contact\_center:update:batch\_users:admin, contact\_center:update:user:admin, contact\_center:write:batch\_users:admin, contact\_center:delete:user:admin, contact\_center:write:user:admin, contact\_center:delete:batch\_users:admin, contact\_center:read:list\_skill\_users:admin, contact\_center:read:user\_deleted:admin, contact\_center:read:list\_user\_queues:admin, contact\_center:read:list\_users:admin, contact\_center:read:inbox\_user:admin, contact\_center:read:skill\_user:admin, contact\_center:read:user\_updated:admin, contact\_center:read:user:admin

Team Chat

team\_chat:delete:member:admin, team\_chat:write:message\_files:admin, team\_chat:read:channel:admin, team\_chat:read:list\_invitations:admin, team\_chat:update:message\_emoji:admin, team\_chat:read:list\_administrators:admin, team\_chat:read:user\_channel:admin, team\_chat:update:user\_message:admin, team\_chat:read:list\_user\_sessions:admin, team\_chat:read:list\_user\_messages:admin, team\_chat:write:administrator:admin, team\_chat:write:user\_channel:admin, team\_chat:read:list\_channels:admin, team\_chat:write:members:admin, team\_chat:delete:user\_channel:admin, team\_chat:read:list\_user\_channels:admin, team\_chat:write:files:admin, team\_chat:read:list\_bookmarks:admin, team\_chat:delete:user\_message:admin, team\_chat:read:list\_members:admin, team\_chat:read:chat\_control:admin, team\_chat:update:user\_channel:admin, team\_chat:read:user\_message:admin, team\_chat:update:message\_status:admin, team\_chat:delete:batch\_administrators:admin, team\_chat:read:message\_emoji:admin, team\_chat:write:user\_message:admin

please check and help me on this issue.  
I need to create the users.

---

<div class="post-metadata">

**Author:** ![chunsiong.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/chunsiong.zoom/32/35488_2.png) [@chunsiong.zoom](https://devforum.zoom.us/u/chunsiong.zoom)\
**Post date:** [June 21, 2024, 12:06pm UTC](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395/21 "2024-06-21T12:06:54Z")

</div>

@anjibabuch987 do you have this scope?

 ![image](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/3X/2/5/253f74110d3e2a951315eb18e4315066396d56b7.png)

[Next page](https://devforum.zoom.us/t/reg-need-help-in-creating-users-through-oauth-v2-api/111395.md?page=2)
