public synchronized Users getUsers(String userKey) {
        Users users = null;
        if (userKey == null || userKey.isEmpty())
            return users;

        try {
            String url = this.urlManager.getUsers(Constants.APP_KEY, userKey);

            JSONObject jo = getJson(Methods.GET, url, null);
            if (!jo.has("error")) {

                users = new Users(jo.getString("id"),
                        jo.getString("name"),
                        jo.getString("mail"),
                        jo.getString("access"),
                        jo.getString("login"),
                        jo.getString("created"),
                        jo.getBoolean("enabled"),
                        null, null
                );
                JSONObject plan_JO = jo.getJSONObject("plan");
                Plan plan = new Plan(plan_JO.getString("id"),
                        plan_JO.getInt("concurrency"),
                        plan_JO.getInt("engines"),
                        plan_JO.getBoolean("isMetered"),
                        plan_JO.getInt("threadsPerEngine"),
                        plan_JO.getInt("threadsPerMediumEngine"));
                users.setPlan(plan);
                JSONArray locations = this.getLocations(userKey);
                users.setLocations(locations);
            }
        } catch (JSONException e) {
            BmLog.error("Error getting users: " + e);
        } catch (Throwable e) {
            BmLog.error("Error getting users: " + e);
        }
        return users;
    }