pythonapibluejeans

How to obtain a user_id or enterprise_id for the BlueJeans REST API?


I'm trying to use the BlueJeans REST API in Python, which is documented on its Github page (https://github.com/bluejeans/api-rest-meetings/tree/master/libs/python) and its general API documentation page (https://bluejeans.github.io/api-rest-meetings/site/index.html).

So far, I've written a method to get the token using client credentials which I've stored in my Django settings:

import json
from urllib.parse import urljoin
import requests
import logging
import BlueJeansMeetingsRestApi
from django.conf import settings
from rest_framework import status

logger = logging.getLogger(__name__)


class ConferenceScheduler(object):
    BASE_URL = 'https://api.bluejeans.com'

    @staticmethod
    def get_token():
        # Obtain an access token to initiate a session with BlueJeans
        # (We use the Client Grant Type which grants us enterprise-level access)
        response = requests.post(
            url=urljoin(base=ConferenceScheduler.BASE_URL, url='/oauth2/token'),
            json={
                'grant_type': 'client_credentials',
                'client_id': settings.BLUEJEANS_KEY,
                'client_secret': settings.BLUEJEANS_SECRET})
        if response.status_code == status.HTTP_200_OK:
            return json.loads(response.content).get('access_token')
        else:
            logger.error(f"A request for a BlueJeans access token returned a non-200 response.\n"
                         f"Status code: {response.status_code}\n"
                         f"Reason: {response.reason}")

I'm using this in the Django shell as follows:

In [2]: from lucy_web.lib.conferencing import *

In [3]: BlueJeansMeetingsRestApi.configuration.api_key['access_token'] = ConferenceSch
   ...: eduler.get_token()

In [4]: api_instance = BlueJeansMeetingsRestApi.ApplicationApi()

In [5]: user_id = settings.BLUEJEANS_USER_ID

In [7]: application = BlueJeansMeetingsRestApi.Application()

Here, I got the user_id from the "BlueJeans Meeting I.D." field in the BlueJeans enterprise admin console. However, if I try to create a client application, I get an ApiException resulting from a 401 (Unauthorized) HTTP response:

In [8]: api_response = api_instance.create_client_application(user_id, application)
---------------------------------------------------------------------------
ApiException                              Traceback (most recent call last)
<ipython-input-8-1bf90ba9e2a8> in <module>()
----> 1 api_response = api_instance.create_client_application(user_id, application)

~/.local/share/virtualenvs/lucy-web-CVxkrCFK/lib/python3.6/site-packages/BlueJeansMeetingsRestApi/apis/application_api.py in create_client_application(self, user_id, application, **kwargs)
     65             return self.create_client_application_with_http_info(user_id, application, **kwargs)
     66         else:
---> 67             (data) = self.create_client_application_with_http_info(user_id, application, **kwargs)
     68             return data
     69 

~/.local/share/virtualenvs/lucy-web-CVxkrCFK/lib/python3.6/site-packages/BlueJeansMeetingsRestApi/apis/application_api.py in create_client_application_with_http_info(self, user_id, application, **kwargs)
    148                                         _preload_content=params.get('_preload_content', True),
    149                                         _request_timeout=params.get('_request_timeout'),
--> 150                                         collection_formats=collection_formats)
    151 
    152     def regenerate_client_application_secret(self, user_id, client_id, **kwargs):

~/.local/share/virtualenvs/lucy-web-CVxkrCFK/lib/python3.6/site-packages/BlueJeansMeetingsRestApi/api_client.py in call_api(self, resource_path, method, path_params, query_params, header_params, body, post_params, files, response_type, auth_settings, callback, _return_http_data_only, collection_formats, _preload_content, _request_timeout)
    324                                    body, post_params, files,
    325                                    response_type, auth_settings, callback,
--> 326                                    _return_http_data_only, collection_formats, _preload_content, _request_timeout)
    327         else:
    328             thread = threading.Thread(target=self.__call_api,

~/.local/share/virtualenvs/lucy-web-CVxkrCFK/lib/python3.6/site-packages/BlueJeansMeetingsRestApi/api_client.py in __call_api(self, resource_path, method, path_params, query_params, header_params, body, post_params, files, response_type, auth_settings, callback, _return_http_data_only, collection_formats, _preload_content, _request_timeout)
    151                                      post_params=post_params, body=body,
    152                                      _preload_content=_preload_content,
--> 153                                      _request_timeout=_request_timeout)
    154 
    155         self.last_response = response_data

~/.local/share/virtualenvs/lucy-web-CVxkrCFK/lib/python3.6/site-packages/BlueJeansMeetingsRestApi/api_client.py in request(self, method, url, query_params, headers, post_params, body, _preload_content, _request_timeout)
    369                                          _preload_content=_preload_content,
    370                                          _request_timeout=_request_timeout,
--> 371                                          body=body)
    372         elif method == "PUT":
    373             return self.rest_client.PUT(url,

~/.local/share/virtualenvs/lucy-web-CVxkrCFK/lib/python3.6/site-packages/BlueJeansMeetingsRestApi/rest.py in POST(self, url, headers, query_params, post_params, body, _preload_content, _request_timeout)
    261                             _preload_content=_preload_content,
    262                             _request_timeout=_request_timeout,
--> 263                             body=body)
    264 
    265     def PUT(self, url, headers=None, query_params=None, post_params=None, body=None, _preload_content=True,

~/.local/share/virtualenvs/lucy-web-CVxkrCFK/lib/python3.6/site-packages/BlueJeansMeetingsRestApi/rest.py in request(self, method, url, query_params, headers, body, post_params, _preload_content, _request_timeout)
    217 
    218         if not 200 <= r.status <= 299:
--> 219             raise ApiException(http_resp=r)
    220 
    221         return r

ApiException: (401)
Reason: Unauthorized
HTTP response headers: HTTPHeaderDict({'Server': 'BlueJeans Proxy', 'Date': 'Fri, 06 Jul 2018 21:15:54 GMT', 'Cache-Control': 'must-revalidate, no-cache, no-store', 'X-Trace-Token': 'sj1-prod-cobalt-01-158865374', 'Content-Type': 'text/html; charset=ISO-8859-1', 'Content-Length': '280'})
HTTP response body: <html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
<title>Error 401 </title>
</head>
<body>
<h2>HTTP ERROR: 401</h2>
<p>Problem accessing /v1/user/307901319/developer_applications. Reason:
<pre>    Unauthorized</pre></p>
<hr />
</body>
</html>

How do I get the user ID or the enterprise ID? From the documentation, it seems that all endpoints require this, but it is unclear how to obtain it in the first place.


Solution

  • It turns out this information cannot be obtained from the BlueJeans admin console; their customer support emailed it to me.