diff --git a/pkg/spaces/middleware/access_logging_middleware.go b/pkg/spaces/middleware/access_logging_middleware.go
index 7fca51ede8a87ba31ceb7293537e32c2db4c08d7..5a21e84e7dcd6b5044e247a4c449003aaff5e182 100644
--- a/pkg/spaces/middleware/access_logging_middleware.go
+++ b/pkg/spaces/middleware/access_logging_middleware.go
@@ -217,3 +217,22 @@ func (m *accessLoggingMiddleware) UpdateConfig(ctx context.Context, spaceId stri
 
 	return err
 }
+
+func (m *accessLoggingMiddleware) SetState(ctx context.Context, spaceID string, state *spaces.StateInfo) (err error) {
+	begin := time.Now()
+
+	m.logger.Debug("SetState.Request",
+		zap.Reflect("principal", auth.GetPrincipal(ctx)),
+		zap.Reflect("spaceID", spaceID),
+		zap.Reflect("state", state),
+	)
+
+	err = m.next.SetState(ctx, spaceID, state)
+
+	m.logger.Debug("SetState.Response",
+		zap.Duration("time", time.Since(begin)),
+		zap.Error(err),
+	)
+
+	return err
+}
diff --git a/pkg/spaces/middleware/caching_middleware.go b/pkg/spaces/middleware/caching_middleware.go
index f99e21a1f4a254ef6fb0890d09776b9b4738fd38..97029a526f6fa701ed8d34090e52f4579214bcbe 100644
--- a/pkg/spaces/middleware/caching_middleware.go
+++ b/pkg/spaces/middleware/caching_middleware.go
@@ -91,6 +91,20 @@ func (m cachingMiddleware) UpdateConfig(ctx context.Context, spaceId string, con
 	return err
 }
 
+func (m cachingMiddleware) SetState(ctx context.Context, spaceID string, state *service.StateInfo) (err error) {
+
+	err = m.next.SetState(ctx, spaceID, state)
+	if err == nil {
+		value, e := m.cache.Get(spaceID)
+		if e == nil {
+			space := value.(*service.Space)
+			_ = m.cache.Remove(orgKey(space.OrgID))
+		}
+		_ = m.cache.Remove(spaceID)
+	}
+	return err
+}
+
 func (m cachingMiddleware) Delete(ctx context.Context, spaceId string) (err error) {
 
 	err = m.next.Delete(ctx, spaceId)
diff --git a/pkg/spaces/middleware/error_logging_middleware.go b/pkg/spaces/middleware/error_logging_middleware.go
index 2b11838b51f1a033e9963a729c6378401e193d0c..0afa3eec8b1cec0319afedabcfaabcf7e4899119 100644
--- a/pkg/spaces/middleware/error_logging_middleware.go
+++ b/pkg/spaces/middleware/error_logging_middleware.go
@@ -99,6 +99,16 @@ func (m *errorLoggingMiddleware) Move(ctx context.Context, spaceID string, orgID
 	return m.next.Move(ctx, spaceID, orgID)
 }
 
+func (m *errorLoggingMiddleware) SetState(ctx context.Context, spaceID string, state *spaces.StateInfo) (err error) {
+	logger := m.logger
+	defer func() {
+		if err != nil {
+			logger.Warn("response error", zap.Error(err))
+		}
+	}()
+	return m.next.SetState(ctx, spaceID, state)
+}
+
 func (m *errorLoggingMiddleware) Transfer(ctx context.Context, spaceID string, transferToOrg string) (err error) {
 	logger := m.logger
 	defer func() {
diff --git a/pkg/spaces/middleware/logging_middleware.go b/pkg/spaces/middleware/logging_middleware.go
index 877ee7e5a62cb0a4a081191b2497d04051771757..4c5852e1f882612baa919aa2ce3209a3f0e438b1 100644
--- a/pkg/spaces/middleware/logging_middleware.go
+++ b/pkg/spaces/middleware/logging_middleware.go
@@ -180,6 +180,28 @@ func (m *loggingMiddleware) Update(ctx context.Context, space *spaces.Space) (er
 	return err
 }
 
+func (m *loggingMiddleware) SetState(ctx context.Context, spaceID string, state *spaces.StateInfo) (err error) {
+	logger := m.logger.With(
+		logzap.Caller(ctx),
+		logzap.Event(spaces.EventUpdate),
+		logzap.Object(id.NewSpaceId(spaceID)),
+	)
+
+	var st spaces.State
+	if state != nil {
+		st = state.State
+	}
+
+	err = m.next.SetState(ctx, spaceID, state)
+	if err != nil {
+		logger.Error(fmt.Sprintf("Failed to set state '%s' to space", st), zap.Error(err))
+		return
+	}
+
+	logger.Info(fmt.Sprintf("Set state '%s' to space", st))
+	return err
+}
+
 func (m *loggingMiddleware) UpdateConfig(ctx context.Context, spaceId string, config *spaces.Config) (err error) {
 	logger := m.logger.With(
 		logzap.Caller(ctx),
diff --git a/pkg/spaces/middleware/recovering_middleware.go b/pkg/spaces/middleware/recovering_middleware.go
index 7b9b64ed276aa9a91dd9e07ee1b463ff8bb06003..162f9a4cd0aa6e4a5201dfdfb0c3b1ff0ab7b39f 100644
--- a/pkg/spaces/middleware/recovering_middleware.go
+++ b/pkg/spaces/middleware/recovering_middleware.go
@@ -114,6 +114,18 @@ func (m *recoveringMiddleware) Move(ctx context.Context, spaceID string, orgID s
 	return m.next.Move(ctx, spaceID, orgID)
 }
 
+func (m *recoveringMiddleware) SetState(ctx context.Context, spaceID string, state *spaces.StateInfo) (err error) {
+	logger := m.logger
+	defer func() {
+		if r := recover(); r != nil {
+			logger.Error("panic", zap.Error(fmt.Errorf("%v", r)))
+			err = fmt.Errorf("%v", r)
+		}
+	}()
+
+	return m.next.SetState(ctx, spaceID, state)
+}
+
 func (m *recoveringMiddleware) Transfer(ctx context.Context, spaceID string, transferToOrg string) (err error) {
 	logger := m.logger
 	defer func() {
diff --git a/pkg/spaces/middleware/telemetry_middleware.go b/pkg/spaces/middleware/telemetry_middleware.go
index 90597815e8e7aa0a3a364c3e29aa208f3473d690..38a47697e66d375629524faf47501218d08b759d 100644
--- a/pkg/spaces/middleware/telemetry_middleware.go
+++ b/pkg/spaces/middleware/telemetry_middleware.go
@@ -1,10 +1,10 @@
 // Code generated by gowrap. DO NOT EDIT.
-// template: ..\..\..\assets\templates\middleware\telemetry
+// template: ../../../assets/templates/middleware/telemetry
 // gowrap: http://github.com/hexdigest/gowrap
 
 package middleware
 
-//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/spaces -i Spaces -t ..\..\..\assets\templates\middleware\telemetry -o telemetry_middleware.go -l ""
+//go:generate gowrap gen -p git.perx.ru/perxis/perxis-go/pkg/spaces -i Spaces -t ../../../assets/templates/middleware/telemetry -o telemetry_middleware.go -l ""
 
 // source template: https://github.com/hexdigest/gowrap/blob/master/templates/opentelemetry
 
@@ -284,6 +284,40 @@ func (_d telemetryMiddleware) Move(ctx context.Context, spaceID string, orgID st
 	return _d.Spaces.Move(ctx, spaceID, orgID)
 }
 
+// SetState implements spaces.Spaces
+func (_d telemetryMiddleware) SetState(ctx context.Context, spaceID string, state *spaces.StateInfo) (err error) {
+	attributes := otelmetric.WithAttributeSet(attribute.NewSet(
+		attribute.String("service", "Spaces"),
+		attribute.String("method", "SetState"),
+	))
+
+	_d.requestMetrics.Total.Add(ctx, 1, attributes)
+
+	start := time.Now()
+	ctx, _span := otel.Tracer(_d._instance).Start(ctx, "Spaces.SetState")
+
+	defer func() {
+		_d.requestMetrics.DurationMilliseconds.Record(ctx, time.Since(start).Milliseconds(), attributes)
+
+		if _d._spanDecorator != nil {
+			_d._spanDecorator(_span, map[string]interface{}{
+				"ctx":     ctx,
+				"spaceID": spaceID,
+				"state":   state}, map[string]interface{}{
+				"err": err})
+		} else if err != nil {
+			_d.requestMetrics.FailedTotal.Add(ctx, 1, attributes)
+
+			_span.RecordError(err)
+			_span.SetAttributes(attribute.String("event", "error"))
+			_span.SetAttributes(attribute.String("message", err.Error()))
+		}
+
+		_span.End()
+	}()
+	return _d.Spaces.SetState(ctx, spaceID, state)
+}
+
 // Transfer implements spaces.Spaces
 func (_d telemetryMiddleware) Transfer(ctx context.Context, spaceID string, transferToOrg string) (err error) {
 	attributes := otelmetric.WithAttributeSet(attribute.NewSet(
diff --git a/pkg/spaces/mocks/SpaceCreatedObserver.go b/pkg/spaces/mocks/SpaceCreatedObserver.go
index a85eced793564cc3fc27304881486329041c3d75..049a741a757f5d107d347f826363eafeb29d85ac 100644
--- a/pkg/spaces/mocks/SpaceCreatedObserver.go
+++ b/pkg/spaces/mocks/SpaceCreatedObserver.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.15.0. DO NOT EDIT.
+// Code generated by mockery v2.40.3. DO NOT EDIT.
 
 package mocks
 
@@ -18,6 +18,10 @@ type SpaceCreatedObserver struct {
 func (_m *SpaceCreatedObserver) OnSpaceCreated(ctx context.Context, space *spaces.Space) error {
 	ret := _m.Called(ctx, space)
 
+	if len(ret) == 0 {
+		panic("no return value specified for OnSpaceCreated")
+	}
+
 	var r0 error
 	if rf, ok := ret.Get(0).(func(context.Context, *spaces.Space) error); ok {
 		r0 = rf(ctx, space)
@@ -28,13 +32,12 @@ func (_m *SpaceCreatedObserver) OnSpaceCreated(ctx context.Context, space *space
 	return r0
 }
 
-type mockConstructorTestingTNewSpaceCreatedObserver interface {
+// NewSpaceCreatedObserver creates a new instance of SpaceCreatedObserver. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
+// The first argument is typically a *testing.T value.
+func NewSpaceCreatedObserver(t interface {
 	mock.TestingT
 	Cleanup(func())
-}
-
-// NewSpaceCreatedObserver creates a new instance of SpaceCreatedObserver. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
-func NewSpaceCreatedObserver(t mockConstructorTestingTNewSpaceCreatedObserver) *SpaceCreatedObserver {
+}) *SpaceCreatedObserver {
 	mock := &SpaceCreatedObserver{}
 	mock.Mock.Test(t)
 
diff --git a/pkg/spaces/mocks/SpaceDeletedObserver.go b/pkg/spaces/mocks/SpaceDeletedObserver.go
index 450173b03b0007c86b4dffee69a0c36522f9ce28..d4e65da6af20b85ab56159fcafed103f92b9c26b 100644
--- a/pkg/spaces/mocks/SpaceDeletedObserver.go
+++ b/pkg/spaces/mocks/SpaceDeletedObserver.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.15.0. DO NOT EDIT.
+// Code generated by mockery v2.40.3. DO NOT EDIT.
 
 package mocks
 
@@ -18,6 +18,10 @@ type SpaceDeletedObserver struct {
 func (_m *SpaceDeletedObserver) OnSpaceDeleted(ctx context.Context, space *spaces.Space) error {
 	ret := _m.Called(ctx, space)
 
+	if len(ret) == 0 {
+		panic("no return value specified for OnSpaceDeleted")
+	}
+
 	var r0 error
 	if rf, ok := ret.Get(0).(func(context.Context, *spaces.Space) error); ok {
 		r0 = rf(ctx, space)
@@ -28,13 +32,12 @@ func (_m *SpaceDeletedObserver) OnSpaceDeleted(ctx context.Context, space *space
 	return r0
 }
 
-type mockConstructorTestingTNewSpaceDeletedObserver interface {
+// NewSpaceDeletedObserver creates a new instance of SpaceDeletedObserver. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
+// The first argument is typically a *testing.T value.
+func NewSpaceDeletedObserver(t interface {
 	mock.TestingT
 	Cleanup(func())
-}
-
-// NewSpaceDeletedObserver creates a new instance of SpaceDeletedObserver. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
-func NewSpaceDeletedObserver(t mockConstructorTestingTNewSpaceDeletedObserver) *SpaceDeletedObserver {
+}) *SpaceDeletedObserver {
 	mock := &SpaceDeletedObserver{}
 	mock.Mock.Test(t)
 
diff --git a/pkg/spaces/mocks/SpaceObserver.go b/pkg/spaces/mocks/SpaceObserver.go
index 9c5006bf80047884f45637207d3ea6fdf0b702aa..589a7755a4cd86c025c816d652081e0597720d5e 100644
--- a/pkg/spaces/mocks/SpaceObserver.go
+++ b/pkg/spaces/mocks/SpaceObserver.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.15.0. DO NOT EDIT.
+// Code generated by mockery v2.40.3. DO NOT EDIT.
 
 package mocks
 
@@ -9,13 +9,12 @@ type SpaceObserver struct {
 	mock.Mock
 }
 
-type mockConstructorTestingTNewSpaceObserver interface {
+// NewSpaceObserver creates a new instance of SpaceObserver. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
+// The first argument is typically a *testing.T value.
+func NewSpaceObserver(t interface {
 	mock.TestingT
 	Cleanup(func())
-}
-
-// NewSpaceObserver creates a new instance of SpaceObserver. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
-func NewSpaceObserver(t mockConstructorTestingTNewSpaceObserver) *SpaceObserver {
+}) *SpaceObserver {
 	mock := &SpaceObserver{}
 	mock.Mock.Test(t)
 
diff --git a/pkg/spaces/mocks/SpaceUpdatedObserver.go b/pkg/spaces/mocks/SpaceUpdatedObserver.go
index a7ced9b2d7bab0618013b5f73cef304c40cecb57..adfa9ea58992d08746ae6072743fe59a21a4bd10 100644
--- a/pkg/spaces/mocks/SpaceUpdatedObserver.go
+++ b/pkg/spaces/mocks/SpaceUpdatedObserver.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.15.0. DO NOT EDIT.
+// Code generated by mockery v2.40.3. DO NOT EDIT.
 
 package mocks
 
@@ -18,6 +18,10 @@ type SpaceUpdatedObserver struct {
 func (_m *SpaceUpdatedObserver) OnSpaceUpdated(ctx context.Context, before *spaces.Space, space *spaces.Space) error {
 	ret := _m.Called(ctx, before, space)
 
+	if len(ret) == 0 {
+		panic("no return value specified for OnSpaceUpdated")
+	}
+
 	var r0 error
 	if rf, ok := ret.Get(0).(func(context.Context, *spaces.Space, *spaces.Space) error); ok {
 		r0 = rf(ctx, before, space)
@@ -28,13 +32,12 @@ func (_m *SpaceUpdatedObserver) OnSpaceUpdated(ctx context.Context, before *spac
 	return r0
 }
 
-type mockConstructorTestingTNewSpaceUpdatedObserver interface {
+// NewSpaceUpdatedObserver creates a new instance of SpaceUpdatedObserver. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
+// The first argument is typically a *testing.T value.
+func NewSpaceUpdatedObserver(t interface {
 	mock.TestingT
 	Cleanup(func())
-}
-
-// NewSpaceUpdatedObserver creates a new instance of SpaceUpdatedObserver. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
-func NewSpaceUpdatedObserver(t mockConstructorTestingTNewSpaceUpdatedObserver) *SpaceUpdatedObserver {
+}) *SpaceUpdatedObserver {
 	mock := &SpaceUpdatedObserver{}
 	mock.Mock.Test(t)
 
diff --git a/pkg/spaces/mocks/Spaces.go b/pkg/spaces/mocks/Spaces.go
index 0f7a187f31a572c96205427dae3438aac768c5e5..5e67d52deeab49a82d05ee410c4711106c387cb7 100644
--- a/pkg/spaces/mocks/Spaces.go
+++ b/pkg/spaces/mocks/Spaces.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.27.1. DO NOT EDIT.
+// Code generated by mockery v2.40.3. DO NOT EDIT.
 
 package mocks
 
@@ -18,6 +18,10 @@ type Spaces struct {
 func (_m *Spaces) AbortTransfer(ctx context.Context, spaceID string) error {
 	ret := _m.Called(ctx, spaceID)
 
+	if len(ret) == 0 {
+		panic("no return value specified for AbortTransfer")
+	}
+
 	var r0 error
 	if rf, ok := ret.Get(0).(func(context.Context, string) error); ok {
 		r0 = rf(ctx, spaceID)
@@ -32,6 +36,10 @@ func (_m *Spaces) AbortTransfer(ctx context.Context, spaceID string) error {
 func (_m *Spaces) Create(ctx context.Context, space *spaces.Space) (*spaces.Space, error) {
 	ret := _m.Called(ctx, space)
 
+	if len(ret) == 0 {
+		panic("no return value specified for Create")
+	}
+
 	var r0 *spaces.Space
 	var r1 error
 	if rf, ok := ret.Get(0).(func(context.Context, *spaces.Space) (*spaces.Space, error)); ok {
@@ -58,6 +66,10 @@ func (_m *Spaces) Create(ctx context.Context, space *spaces.Space) (*spaces.Spac
 func (_m *Spaces) Delete(ctx context.Context, spaceId string) error {
 	ret := _m.Called(ctx, spaceId)
 
+	if len(ret) == 0 {
+		panic("no return value specified for Delete")
+	}
+
 	var r0 error
 	if rf, ok := ret.Get(0).(func(context.Context, string) error); ok {
 		r0 = rf(ctx, spaceId)
@@ -72,6 +84,10 @@ func (_m *Spaces) Delete(ctx context.Context, spaceId string) error {
 func (_m *Spaces) Get(ctx context.Context, spaceId string) (*spaces.Space, error) {
 	ret := _m.Called(ctx, spaceId)
 
+	if len(ret) == 0 {
+		panic("no return value specified for Get")
+	}
+
 	var r0 *spaces.Space
 	var r1 error
 	if rf, ok := ret.Get(0).(func(context.Context, string) (*spaces.Space, error)); ok {
@@ -98,6 +114,10 @@ func (_m *Spaces) Get(ctx context.Context, spaceId string) (*spaces.Space, error
 func (_m *Spaces) List(ctx context.Context, orgId string) ([]*spaces.Space, error) {
 	ret := _m.Called(ctx, orgId)
 
+	if len(ret) == 0 {
+		panic("no return value specified for List")
+	}
+
 	var r0 []*spaces.Space
 	var r1 error
 	if rf, ok := ret.Get(0).(func(context.Context, string) ([]*spaces.Space, error)); ok {
@@ -124,6 +144,10 @@ func (_m *Spaces) List(ctx context.Context, orgId string) ([]*spaces.Space, erro
 func (_m *Spaces) ListTransfers(ctx context.Context, orgID string) ([]*spaces.Space, error) {
 	ret := _m.Called(ctx, orgID)
 
+	if len(ret) == 0 {
+		panic("no return value specified for ListTransfers")
+	}
+
 	var r0 []*spaces.Space
 	var r1 error
 	if rf, ok := ret.Get(0).(func(context.Context, string) ([]*spaces.Space, error)); ok {
@@ -150,6 +174,10 @@ func (_m *Spaces) ListTransfers(ctx context.Context, orgID string) ([]*spaces.Sp
 func (_m *Spaces) Move(ctx context.Context, spaceID string, orgID string) error {
 	ret := _m.Called(ctx, spaceID, orgID)
 
+	if len(ret) == 0 {
+		panic("no return value specified for Move")
+	}
+
 	var r0 error
 	if rf, ok := ret.Get(0).(func(context.Context, string, string) error); ok {
 		r0 = rf(ctx, spaceID, orgID)
@@ -160,10 +188,32 @@ func (_m *Spaces) Move(ctx context.Context, spaceID string, orgID string) error
 	return r0
 }
 
+// SetState provides a mock function with given fields: ctx, spaceID, state
+func (_m *Spaces) SetState(ctx context.Context, spaceID string, state *spaces.StateInfo) error {
+	ret := _m.Called(ctx, spaceID, state)
+
+	if len(ret) == 0 {
+		panic("no return value specified for SetState")
+	}
+
+	var r0 error
+	if rf, ok := ret.Get(0).(func(context.Context, string, *spaces.StateInfo) error); ok {
+		r0 = rf(ctx, spaceID, state)
+	} else {
+		r0 = ret.Error(0)
+	}
+
+	return r0
+}
+
 // Transfer provides a mock function with given fields: ctx, spaceID, transferToOrg
 func (_m *Spaces) Transfer(ctx context.Context, spaceID string, transferToOrg string) error {
 	ret := _m.Called(ctx, spaceID, transferToOrg)
 
+	if len(ret) == 0 {
+		panic("no return value specified for Transfer")
+	}
+
 	var r0 error
 	if rf, ok := ret.Get(0).(func(context.Context, string, string) error); ok {
 		r0 = rf(ctx, spaceID, transferToOrg)
@@ -178,6 +228,10 @@ func (_m *Spaces) Transfer(ctx context.Context, spaceID string, transferToOrg st
 func (_m *Spaces) Update(ctx context.Context, space *spaces.Space) error {
 	ret := _m.Called(ctx, space)
 
+	if len(ret) == 0 {
+		panic("no return value specified for Update")
+	}
+
 	var r0 error
 	if rf, ok := ret.Get(0).(func(context.Context, *spaces.Space) error); ok {
 		r0 = rf(ctx, space)
@@ -192,6 +246,10 @@ func (_m *Spaces) Update(ctx context.Context, space *spaces.Space) error {
 func (_m *Spaces) UpdateConfig(ctx context.Context, spaceId string, config *spaces.Config) error {
 	ret := _m.Called(ctx, spaceId, config)
 
+	if len(ret) == 0 {
+		panic("no return value specified for UpdateConfig")
+	}
+
 	var r0 error
 	if rf, ok := ret.Get(0).(func(context.Context, string, *spaces.Config) error); ok {
 		r0 = rf(ctx, spaceId, config)
@@ -202,13 +260,12 @@ func (_m *Spaces) UpdateConfig(ctx context.Context, spaceId string, config *spac
 	return r0
 }
 
-type mockConstructorTestingTNewSpaces interface {
+// NewSpaces creates a new instance of Spaces. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
+// The first argument is typically a *testing.T value.
+func NewSpaces(t interface {
 	mock.TestingT
 	Cleanup(func())
-}
-
-// NewSpaces creates a new instance of Spaces. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
-func NewSpaces(t mockConstructorTestingTNewSpaces) *Spaces {
+}) *Spaces {
 	mock := &Spaces{}
 	mock.Mock.Test(t)
 
diff --git a/pkg/spaces/mocks/Storage.go b/pkg/spaces/mocks/Storage.go
index 0f61e8c4d5796032d6e6103b070512dc8c5b87b7..078993cebec0cb2a5748c0d5bf1c50fb68d4def0 100644
--- a/pkg/spaces/mocks/Storage.go
+++ b/pkg/spaces/mocks/Storage.go
@@ -1,4 +1,4 @@
-// Code generated by mockery v2.27.1. DO NOT EDIT.
+// Code generated by mockery v2.40.3. DO NOT EDIT.
 
 package mocks
 
@@ -20,6 +20,10 @@ type Storage struct {
 func (_m *Storage) Create(ctx context.Context, space *spaces.Space) error {
 	ret := _m.Called(ctx, space)
 
+	if len(ret) == 0 {
+		panic("no return value specified for Create")
+	}
+
 	var r0 error
 	if rf, ok := ret.Get(0).(func(context.Context, *spaces.Space) error); ok {
 		r0 = rf(ctx, space)
@@ -34,6 +38,10 @@ func (_m *Storage) Create(ctx context.Context, space *spaces.Space) error {
 func (_m *Storage) Delete(ctx context.Context, filter *spaces.Filter) (int, error) {
 	ret := _m.Called(ctx, filter)
 
+	if len(ret) == 0 {
+		panic("no return value specified for Delete")
+	}
+
 	var r0 int
 	var r1 error
 	if rf, ok := ret.Get(0).(func(context.Context, *spaces.Filter) (int, error)); ok {
@@ -58,6 +66,10 @@ func (_m *Storage) Delete(ctx context.Context, filter *spaces.Filter) (int, erro
 func (_m *Storage) Find(ctx context.Context, filter *spaces.Filter, opts *options.FindOptions) ([]*spaces.Space, int, error) {
 	ret := _m.Called(ctx, filter, opts)
 
+	if len(ret) == 0 {
+		panic("no return value specified for Find")
+	}
+
 	var r0 []*spaces.Space
 	var r1 int
 	var r2 error
@@ -91,6 +103,10 @@ func (_m *Storage) Find(ctx context.Context, filter *spaces.Filter, opts *option
 func (_m *Storage) Init(ctx context.Context) error {
 	ret := _m.Called(ctx)
 
+	if len(ret) == 0 {
+		panic("no return value specified for Init")
+	}
+
 	var r0 error
 	if rf, ok := ret.Get(0).(func(context.Context) error); ok {
 		r0 = rf(ctx)
@@ -105,6 +121,10 @@ func (_m *Storage) Init(ctx context.Context) error {
 func (_m *Storage) Reset(ctx context.Context) error {
 	ret := _m.Called(ctx)
 
+	if len(ret) == 0 {
+		panic("no return value specified for Reset")
+	}
+
 	var r0 error
 	if rf, ok := ret.Get(0).(func(context.Context) error); ok {
 		r0 = rf(ctx)
@@ -119,6 +139,10 @@ func (_m *Storage) Reset(ctx context.Context) error {
 func (_m *Storage) Update(ctx context.Context, update *spaces.Space, filter *spaces.Filter) (int, int, error) {
 	ret := _m.Called(ctx, update, filter)
 
+	if len(ret) == 0 {
+		panic("no return value specified for Update")
+	}
+
 	var r0 int
 	var r1 int
 	var r2 error
@@ -146,13 +170,12 @@ func (_m *Storage) Update(ctx context.Context, update *spaces.Space, filter *spa
 	return r0, r1, r2
 }
 
-type mockConstructorTestingTNewStorage interface {
+// NewStorage creates a new instance of Storage. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
+// The first argument is typically a *testing.T value.
+func NewStorage(t interface {
 	mock.TestingT
 	Cleanup(func())
-}
-
-// NewStorage creates a new instance of Storage. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
-func NewStorage(t mockConstructorTestingTNewStorage) *Storage {
+}) *Storage {
 	mock := &Storage{}
 	mock.Mock.Test(t)
 
diff --git a/pkg/spaces/service.go b/pkg/spaces/service.go
index 40c6bd9ebf7a16f694bec40388dd4a7dd8208473..1877e468a70e3145b9289c685a129739ba29e01b 100644
--- a/pkg/spaces/service.go
+++ b/pkg/spaces/service.go
@@ -28,6 +28,9 @@ type Spaces interface {
 	List(ctx context.Context, orgId string) (spaces []*Space, err error)
 	Update(ctx context.Context, space *Space) (err error)
 	UpdateConfig(ctx context.Context, spaceId string, config *Config) (err error)
+
+	// @microgen -
+	SetState(ctx context.Context, spaceID string, state *StateInfo) (err error)
 	Delete(ctx context.Context, spaceId string) (err error)
 
 	// Transfer устанавливает для пространства значение поля RequestedMoveTo. После этого пространство
diff --git a/pkg/spaces/space.go b/pkg/spaces/space.go
index 83edb3f14706793aed6077adcee856598358b044..482a953b1e79e8690c58748439ce66dc68430b0e 100644
--- a/pkg/spaces/space.go
+++ b/pkg/spaces/space.go
@@ -15,8 +15,29 @@ const (
 	StateError             // Произошла ошибка при конфигурации пространства (см. Space.Error)
 )
 
+func (s State) String() string {
+	switch s {
+	case StateNew:
+		return "New"
+	case StateReady:
+		return "Ready"
+	case StatePreparing:
+		return "Preparing"
+	case StateMaintenance:
+		return "Maintenance"
+	case StateMigration:
+		return "Migration"
+	case StateDeleting:
+		return "Deleting"
+	case StateError:
+		return "Error"
+	default:
+		return "Unknown"
+	}
+}
+
 type Config struct {
-	Features []string //Deprecated Возможности используемые пространством
+	Features []string // Deprecated Возможности используемые пространством
 }
 
 const StateInfoEmpty = "EMPTY"
@@ -42,4 +63,4 @@ type StateInfo struct {
 
 func (s Space) Clone() *Space {
 	return &s
-}
\ No newline at end of file
+}
diff --git a/pkg/spaces/transport/client.go b/pkg/spaces/transport/client.go
index 26900dad00a30d5c685ce507626dd7d93d847c87..f7f2edcd2b04d986c03720966b7c677c3ac6be2d 100644
--- a/pkg/spaces/transport/client.go
+++ b/pkg/spaces/transport/client.go
@@ -56,6 +56,10 @@ func (set EndpointsSet) UpdateConfig(arg0 context.Context, arg1 string, arg2 *sp
 	return res0
 }
 
+func (set EndpointsSet) SetState(arg0 context.Context, arg1 string, arg2 *spaces.StateInfo) (res0 error) {
+	return
+}
+
 func (set EndpointsSet) Delete(arg0 context.Context, arg1 string) (res0 error) {
 	request := DeleteRequest{SpaceId: arg1}
 	_, res0 = set.DeleteEndpoint(arg0, &request)