diff --git a/mgrctl/apps/vm6/auth/commands.py b/mgrctl/apps/vm6/auth/commands.py
index 783e118..e38defb 100644
--- a/mgrctl/apps/vm6/auth/commands.py
+++ b/mgrctl/apps/vm6/auth/commands.py
@@ -38,16 +38,22 @@ def user():
 )
 def ls(all, admins):
     if all:
-        user_cursor.echo_users(role='all')
+        users = user_cursor.get_users(role='all')
     elif admins:
-        user_cursor.echo_users(role='admin')
+        users = user_cursor.get_users(role='admin')
     else:
-        user_cursor.echo_users(role='all')
+        users = user_cursor.get_users(role='all')
+    # print users:
+    user_cursor.echo_users(users)
 
 
-@user.command(help='Generate access key and return auth link(s)')
+@user.command(
+    help='Generate an access key and return auth link(s)',
+    no_args_is_help=True
+)
 @click.option(
     '--id',
+    '_id',
     required=False,
     type=int,
     help='User id'
@@ -62,7 +68,7 @@ def ls(all, admins):
     '--random',
     is_flag=True,
     required=False,
-    help='Interactive mode, ignores other keys'
+    help='Generate access key for the first available admin'
 )
 @click.option(
     '--interactive',
@@ -70,24 +76,21 @@ def ls(all, admins):
     required=False,
     help='Interactive mode, ignores other keys'
 )
-def access(id, count, interactive, random):
-    if id and not count:
-        keys = user_cursor.get_access_keys(user=id, count=1)
-        links = user_cursor.gen_access_links(keys)
-        user_cursor.echo_access_links(links)
-    elif id and count:
-        keys = user_cursor.get_access_keys(user=id, count=count)
-        links = user_cursor.gen_access_links(keys)
-        user_cursor.echo_access_links(links)
-    elif interactive:
-        pass
+def access(_id, count, interactive, random):
+    if _id and not count:
+        keys = user_cursor.get_access_keys(user=_id, count=1)
+    elif _id and count:
+        keys = user_cursor.get_access_keys(user=_id, count=count)
     elif random:
         admin = user_cursor.get_first_random_admin()
-        keys = user_cursor.get_access_keys(user=admin.get('id', 3), count=1)
-        links = user_cursor.gen_access_links(keys)
-        user_cursor.echo_access_links(links)
+        keys = user_cursor.get_access_keys(user=admin.get('id', 3))
+    elif interactive:
+        user_cursor.gen_access_links_interactive()
+        return  # exit from func
     else:
         pass
+    links = user_cursor.gen_access_links(keys)
+    user_cursor.echo_access_links(links)
 
 
 @user.command(help='Generate API token for mgrctl user')
diff --git a/mgrctl/utils/api_users.py b/mgrctl/utils/api_users.py
index 8a75e13..7459936 100644
--- a/mgrctl/utils/api_users.py
+++ b/mgrctl/utils/api_users.py
@@ -10,38 +10,43 @@ class UserAPI(object):
         self.callback_class = callback_class
         self.callback = callback_class()
 
-    def get_users(self, role: str) -> dict:
+    def get_users(self, role: str) -> list:
         data = {}
         if role == 'admin':
             data = {"where": "((roles+CP+'%@admin%')+AND+(state+EQ+'active'))"}
-        return self.callback.call_api(
+        response = self.callback.call_api(
             url='/user',
             method='GET',
             data=data
         )
+        users = self._extract_users(users=response)
+        return users
 
-    def _format_users(self, users: dict) -> list:
+    def _extract_users(self, users: dict) -> list:
+        return users.get('list', [])
+
+    def _format_users(self, users: list) -> list:
         output = []
-        for user in users.get('list', []):
+        for user in users:
             output.append({
                 'id': user.get('id', ''),
                 'email': user.get('email', ''),
                 'roles': user.get('roles', []),
-                'state': user.get('state', '')
+                'state': user.get('state', ''),
+                # add more fields here...
             })
         return output
 
     def get_first_random_admin(self):
         users = self.get_users(role='admin')
         admin = {}
-        for user in users.get('list', []):
-            if '@admin' in admin.get('roles', []):
+        for user in users:
+            if '@admin' in user.get('roles', []):
                 admin = user
                 break
         return admin
 
-    def echo_users(self, role: str) -> None:
-        users = self.get_users(role)
+    def echo_users(self, users: list) -> None:
         output = self._format_users(users)
         click.echo(tabulate(output, headers='keys'))
 
@@ -66,6 +71,19 @@ class UserAPI(object):
     def echo_access_links(self, links: list) -> None:
         click.echo(tabulate(links, headers='keys'))
 
+    def gen_access_links_interactive(self) -> None:
+        users = self.get_users(role='admin')
+        self.echo_users(users)
+        try:
+            click.echo('Choose user id and count of keys')
+            _id = int(input('User ID: '))
+            count = int(input('Count of keys: '))
+            keys = self.get_access_keys(user=_id, count=count)
+            links = self.gen_access_links(keys)
+            self.echo_access_links(links)
+        except ValueError:
+            click.echo('Error: Invalid, value is not a valid integer')
+
     def gen_api_token(self, email=None, password=None):
         token = self.callback.get_auth_token(email, password)
         return token