diff --git a/cloudstack/UserService.go b/cloudstack/UserService.go
index c5fe70a..3c024cf 100644
--- a/cloudstack/UserService.go
+++ b/cloudstack/UserService.go
@@ -38,6 +38,8 @@
 	NewEnableUserParams(id string) *EnableUserParams
 	GetUser(p *GetUserParams) (*GetUserResponse, error)
 	NewGetUserParams(userapikey string) *GetUserParams
+	GetUserKeys(p *GetUserKeysParams) (*GetUserKeysResponse, error)
+	NewGetUserKeysParams(id string) *GetUserKeysParams
 	GetVirtualMachineUserData(p *GetVirtualMachineUserDataParams) (*GetVirtualMachineUserDataResponse, error)
 	NewGetVirtualMachineUserDataParams(virtualmachineid string) *GetVirtualMachineUserDataParams
 	ListUsers(p *ListUsersParams) (*ListUsersResponse, error)
@@ -640,6 +642,71 @@
 	Usersource          string `json:"usersource"`
 }
 
+type GetUserKeysParams struct {
+	p map[string]interface{}
+}
+
+func (p *GetUserKeysParams) toURLValues() url.Values {
+	u := url.Values{}
+	if p.p == nil {
+		return u
+	}
+	if v, found := p.p["id"]; found {
+		u.Set("id", v.(string))
+	}
+	return u
+}
+
+func (p *GetUserKeysParams) SetId(v string) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	p.p["id"] = v
+}
+
+func (p *GetUserKeysParams) GetId() (string, bool) {
+	if p.p == nil {
+		p.p = make(map[string]interface{})
+	}
+	value, ok := p.p["id"].(string)
+	return value, ok
+}
+
+// You should always use this function to get a new GetUserKeysParams instance,
+// as then you are sure you have configured all required params
+func (s *UserService) NewGetUserKeysParams(id string) *GetUserKeysParams {
+	p := &GetUserKeysParams{}
+	p.p = make(map[string]interface{})
+	p.p["id"] = id
+	return p
+}
+
+// This command allows the user to query the seceret and API keys for the account
+func (s *UserService) GetUserKeys(p *GetUserKeysParams) (*GetUserKeysResponse, error) {
+	resp, err := s.cs.newRequest("getUserKeys", p.toURLValues())
+	if err != nil {
+		return nil, err
+	}
+
+	if resp, err = getRawValue(resp); err != nil {
+		return nil, err
+	}
+
+	var r GetUserKeysResponse
+	if err := json.Unmarshal(resp, &r); err != nil {
+		return nil, err
+	}
+
+	return &r, nil
+}
+
+type GetUserKeysResponse struct {
+	Apikey    string `json:"apikey"`
+	JobID     string `json:"jobid"`
+	Jobstatus int    `json:"jobstatus"`
+	Secretkey string `json:"secretkey"`
+}
+
 type GetVirtualMachineUserDataParams struct {
 	p map[string]interface{}
 }
diff --git a/cloudstack/UserService_mock.go b/cloudstack/UserService_mock.go
index ea5ab9a..c617813 100644
--- a/cloudstack/UserService_mock.go
+++ b/cloudstack/UserService_mock.go
@@ -148,6 +148,21 @@
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUserByID", reflect.TypeOf((*MockUserServiceIface)(nil).GetUserByID), varargs...)
 }
 
+// GetUserKeys mocks base method.
+func (m *MockUserServiceIface) GetUserKeys(p *GetUserKeysParams) (*GetUserKeysResponse, error) {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "GetUserKeys", p)
+	ret0, _ := ret[0].(*GetUserKeysResponse)
+	ret1, _ := ret[1].(error)
+	return ret0, ret1
+}
+
+// GetUserKeys indicates an expected call of GetUserKeys.
+func (mr *MockUserServiceIfaceMockRecorder) GetUserKeys(p interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUserKeys", reflect.TypeOf((*MockUserServiceIface)(nil).GetUserKeys), p)
+}
+
 // GetVirtualMachineUserData mocks base method.
 func (m *MockUserServiceIface) GetVirtualMachineUserData(p *GetVirtualMachineUserDataParams) (*GetVirtualMachineUserDataResponse, error) {
 	m.ctrl.T.Helper()
@@ -249,6 +264,20 @@
 	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewEnableUserParams", reflect.TypeOf((*MockUserServiceIface)(nil).NewEnableUserParams), id)
 }
 
+// NewGetUserKeysParams mocks base method.
+func (m *MockUserServiceIface) NewGetUserKeysParams(id string) *GetUserKeysParams {
+	m.ctrl.T.Helper()
+	ret := m.ctrl.Call(m, "NewGetUserKeysParams", id)
+	ret0, _ := ret[0].(*GetUserKeysParams)
+	return ret0
+}
+
+// NewGetUserKeysParams indicates an expected call of NewGetUserKeysParams.
+func (mr *MockUserServiceIfaceMockRecorder) NewGetUserKeysParams(id interface{}) *gomock.Call {
+	mr.mock.ctrl.T.Helper()
+	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewGetUserKeysParams", reflect.TypeOf((*MockUserServiceIface)(nil).NewGetUserKeysParams), id)
+}
+
 // NewGetUserParams mocks base method.
 func (m *MockUserServiceIface) NewGetUserParams(userapikey string) *GetUserParams {
 	m.ctrl.T.Helper()
diff --git a/cloudstack/UserService_test.go b/cloudstack/UserService_test.go
index 79a5df1..50cdf2b 100644
--- a/cloudstack/UserService_test.go
+++ b/cloudstack/UserService_test.go
@@ -164,3 +164,25 @@
 		t.Errorf("Failed to delete user")
 	}
 }
+
+func TestGetUserKeys(t *testing.T) {
+	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
+		apiName := "getUserKeys"
+		response, err := ReadData(apiName, "UserService")
+		if err != nil {
+			t.Errorf("Failed to read response data due to: %v", err)
+		}
+		fmt.Fprintf(writer, response[apiName])
+	}))
+	defer server.Close()
+	client := NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	params := client.User.NewGetUserKeysParams("random-id")
+	resp, err := client.User.GetUserKeys(params)
+	if err != nil {
+		t.Errorf("Failed to get user keys due to %v", err)
+		return
+	}
+	if resp.Apikey == "" || resp.Secretkey == "" {
+		t.Errorf("Parsing failure")
+	}
+}
diff --git a/cloudstack/testdata/UserServiceData.json b/cloudstack/testdata/UserServiceData.json
index e38b4f8..c4a3847 100644
--- a/cloudstack/testdata/UserServiceData.json
+++ b/cloudstack/testdata/UserServiceData.json
@@ -147,5 +147,13 @@
     "deleteuserresponse": {
       "success": true
     }
+  },
+  "getUserKeys": {
+    "getuserkeysresponse": {
+      "userkeys": {
+        "apikey": "api-key",
+        "secretkey": "secret-key"
+      }
+    }
   }
 }
\ No newline at end of file
diff --git a/generate/generate.go b/generate/generate.go
index a349c82..488cf4e 100644
--- a/generate/generate.go
+++ b/generate/generate.go
@@ -1503,7 +1503,8 @@
 		"GetVirtualMachineUserData",
 		"LockUser",
 		"RegisterSSHKeyPair",
-		"RegisterUserKeys":
+		"RegisterUserKeys",
+		"GetUserKeys":
 		pn("	if resp, err = getRawValue(resp); err != nil {")
 		pn("		return nil, err")
 		pn("	}")
diff --git a/generate/layout.go b/generate/layout.go
index 6697420..c30bd96 100644
--- a/generate/layout.go
+++ b/generate/layout.go
@@ -304,6 +304,7 @@
 		"disableUser",
 		"enableUser",
 		"getUser",
+		"getUserKeys",
 		"getVirtualMachineUserData",
 		"listUsers",
 		"lockUser",
