diff --git a/openmano b/openmano
index 26ef9b9..e2221bc 100755
--- a/openmano
+++ b/openmano
@@ -890,6 +890,28 @@
         print content['error']['description']
     return result
 
+def get_action(args):
+    if not args.all:
+        tenant = _get_tenant()
+    else:
+        tenant = "any"
+    if not args.instance:
+        instance_id = "any"
+    else:
+        instance_id =args.instance
+    action_id = ""
+    if args.id:
+        action_id = "/" + args.id
+    URLrequest = "http://{}:{}/openmano/{}/instances/{}/action{}".format(mano_host, mano_port, tenant, instance_id,
+                                                                         action_id)
+    mano_response = requests.get(URLrequest)
+    logger.debug("openmano response: %s", mano_response.text )
+    if args.verbose == None:
+        args.verbose = 0
+    if args.id != None:
+        args.verbose += 1
+    return _print_verbose(mano_response, args.verbose)
+
 def instance_scenario_action(args):
     #print "instance-scenario-action", args
     tenant = _get_tenant()
@@ -1752,6 +1774,12 @@
     instance_scenario_action_parser.add_argument("--vm", action="append", help="VM to act on (can use several entries)")
     instance_scenario_action_parser.set_defaults(func=instance_scenario_action)
 
+    action_parser = subparsers.add_parser('action-list', parents=[parent_parser], help="get action over an instance status")
+    action_parser.add_argument("id", nargs='?', action="store", help="action id")
+    action_parser.add_argument("--instance", action="store", help="fitler by this instance_id")
+    action_parser.add_argument("--all", action="store", help="Not filter by tenant")
+    action_parser.set_defaults(func=get_action)
+
     #instance_scenario_status_parser = subparsers.add_parser('instance-scenario-status', help="show the status of a scenario instance")
     #instance_scenario_status_parser.add_argument("name", action="store", help="name or uuid of the scenario instance")
     #instance_scenario_status_parser.set_defaults(func=instance_scenario_status)
