diff --git a/controllers/collaborative_area.go b/controllers/collaborative_area.go
index f9f8e75..078d4ff 100644
--- a/controllers/collaborative_area.go
+++ b/controllers/collaborative_area.go
@@ -6,6 +6,7 @@ import (
 	"slices"
 
 	oclib "cloud.o-forge.io/core/oc-lib"
+	"cloud.o-forge.io/core/oc-lib/config"
 	"cloud.o-forge.io/core/oc-lib/tools"
 	beego "github.com/beego/beego/v2/server/web"
 )
@@ -36,12 +37,15 @@ var paths = map[tools.DataType]map[tools.METHOD]string{ // paths used to call ot
 // @Title Search
 // @Description search shared workspace
 // @Param	search		path 	string	true		"the word search you want to get"
+// @Param 	is_draft        query   string  false       "draft wished"
 // @Success 200 {shared workspace} models.shared_workspace
 // @router /search/:search [get]
 func (o *CollaborativeAreaController) Search() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	// store and return Id or post with UUID
 	search := o.Ctx.Input.Param(":search")
-	o.Data["json"] = oclib.Search(nil, search, oclib.LibDataEnum(tools.COLLABORATIVE_AREA))
+	isDraft := o.Ctx.Input.Query("is_draft")
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, nil).Search(nil, search, isDraft == "true")
 	o.ServeJSON()
 }
 
@@ -52,6 +56,7 @@ func (o *CollaborativeAreaController) Search() {
 // @Success 200 {shared workspace} models.shared_workspace
 // @router /:id [put]
 func (o *CollaborativeAreaController) Put() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	// store and return Id or post with UUID
 	var res map[string]interface{}
 	id := o.Ctx.Input.Param(":id")
@@ -59,7 +64,7 @@ func (o *CollaborativeAreaController) Put() {
 	caller := tools.NewHTTPCaller(paths) // caller used to send to peers
 	caller.Disabled = oclib.IsQueryParamsEquals(o.Ctx.Input, "is_remote", true)
 	fmt.Println("UPDATE", res)
-	o.Data["json"] = oclib.UpdateOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), res, id, caller)
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, caller).UpdateOne(res, id)
 	o.ServeJSON()
 }
 
@@ -69,20 +74,24 @@ func (o *CollaborativeAreaController) Put() {
 // @Success 200 {shared workspace} models.shared_workspace
 // @router / [post]
 func (o *CollaborativeAreaController) Post() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	caller := tools.NewHTTPCaller(paths) // caller used to send to peers
 	caller.Disabled = oclib.IsQueryParamsEquals(o.Ctx.Input, "is_remote", true)
 	var res map[string]interface{}
 	json.Unmarshal(o.Ctx.Input.CopyBody(10000), &res)
-	o.Data["json"] = oclib.StoreOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), res, caller)
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, caller).StoreOne(res)
 	o.ServeJSON()
 }
 
 // @Title GetAll
 // @Description find shared workspace by id
+// @Param 	is_draft        query   string  false       "draft wished"
 // @Success 200 {shared_workspace} models.shared_workspace
 // @router / [get]
 func (o *CollaborativeAreaController) GetAll() {
-	o.Data["json"] = oclib.LoadAll(oclib.LibDataEnum(tools.COLLABORATIVE_AREA))
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
+	isDraft := o.Ctx.Input.Query("is_draft")
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, nil).LoadAll(isDraft == "true")
 	o.ServeJSON()
 }
 
@@ -92,8 +101,9 @@ func (o *CollaborativeAreaController) GetAll() {
 // @Success 200 {shared workspace} models.shared_workspace
 // @router /:id [get]
 func (o *CollaborativeAreaController) Get() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	id := o.Ctx.Input.Param(":id")
-	o.Data["json"] = oclib.LoadOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), id)
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, nil).LoadOne(id)
 	o.ServeJSON()
 }
 
@@ -104,11 +114,12 @@ func (o *CollaborativeAreaController) Get() {
 // @Success 200 {shared workspace} models.shared_workspace
 // @router /:id/workspace/:id2 [delete]
 func (o *CollaborativeAreaController) RemoveWorkspace() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	caller := tools.NewHTTPCaller(paths) // caller used to send to peers
 	caller.Disabled = oclib.IsQueryParamsEquals(o.Ctx.Input, "is_remote", true)
 	id := o.Ctx.Input.Param(":id")
 	id2 := o.Ctx.Input.Param(":id2")
-	r := oclib.LoadOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), id)
+	r := oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, nil).LoadOne(id)
 	shared := r.ToCollaborativeArea()
 	newWorkspace := []string{}
 	if slices.Contains(shared.Workspaces, id2) {
@@ -119,7 +130,8 @@ func (o *CollaborativeAreaController) RemoveWorkspace() {
 		}
 		shared.Workspaces = newWorkspace
 	}
-	o.Data["json"] = oclib.UpdateOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), shared.Serialize(), id, caller)
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, caller).UpdateOne(
+		shared.Serialize(shared), id)
 	o.ServeJSON()
 }
 
@@ -130,11 +142,12 @@ func (o *CollaborativeAreaController) RemoveWorkspace() {
 // @Success 200 {shared workspace} models.shared_workspace
 // @router /:id/workflow/:id2 [delete]
 func (o *CollaborativeAreaController) RemoveWorkflow() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	caller := tools.NewHTTPCaller(paths) // caller used to send to peers
 	caller.Disabled = oclib.IsQueryParamsEquals(o.Ctx.Input, "is_remote", true)
 	id := o.Ctx.Input.Param(":id")
 	id2 := o.Ctx.Input.Param(":id2")
-	r := oclib.LoadOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), id)
+	r := oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, nil).LoadOne(id)
 	shared := r.ToCollaborativeArea()
 	newWorkflows := []string{}
 	for _, w := range shared.Workflows {
@@ -143,7 +156,8 @@ func (o *CollaborativeAreaController) RemoveWorkflow() {
 		}
 	}
 	shared.Workflows = newWorkflows
-	o.Data["json"] = oclib.UpdateOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), shared.Serialize(), id, caller)
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, caller).UpdateOne(
+		shared.Serialize(shared), id)
 	o.ServeJSON()
 }
 
@@ -154,13 +168,14 @@ func (o *CollaborativeAreaController) RemoveWorkflow() {
 // @Success 200 {shared workspace} models.shared_workspace
 // @router /:id/peer/:id2 [delete]
 func (o *CollaborativeAreaController) RemovePeer() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	caller := tools.NewHTTPCaller(paths) // caller used to send to peers
 	caller.Disabled = oclib.IsQueryParamsEquals(o.Ctx.Input, "is_remote", true)
 	id := o.Ctx.Input.Param(":id")
 	id2 := o.Ctx.Input.Param(":id2")
-	r := oclib.LoadOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), id)
+	r := oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, nil).LoadOne(id)
 	shared := r.ToCollaborativeArea()
-	newPeers := []string{}
+	newPeers := map[string][]string{}
 	if shared.CreatorID != id2 {
 		o.Data["json"] = map[string]interface{}{
 			"data":  nil,
@@ -170,15 +185,28 @@ func (o *CollaborativeAreaController) RemovePeer() {
 		o.ServeJSON()
 		return
 	}
-	if slices.Contains(shared.Peers, id) && shared.CreatorID != id2 {
-		for _, peer := range shared.Peers {
-			if peer != id2 {
-				newPeers = append(newPeers, peer)
-			}
+	if shared.AllowedPeersGroup != nil {
+		keys := make([]string, len(shared.AllowedPeersGroup))
+		i := 0
+		for k := range shared.AllowedPeersGroup {
+			keys[i] = k
+			i++
+		}
+		if slices.Contains(keys, id) && shared.CreatorID != id2 {
+			for _, peer := range keys {
+				if peer != id2 {
+					if config.GetConfig().Whitelist {
+						newPeers[peer] = []string{"*"}
+					} else {
+						newPeers[peer] = []string{}
+					}
+				}
+			}
+			shared.AllowedPeersGroup = newPeers
 		}
-		shared.Peers = newPeers
 	}
-	o.Data["json"] = oclib.UpdateOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), shared.Serialize(), id, caller)
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, caller).UpdateOne(
+		shared.Serialize(shared), id)
 	o.ServeJSON()
 }
 
@@ -189,11 +217,12 @@ func (o *CollaborativeAreaController) RemovePeer() {
 // @Success 200 {shared workspace} models.shared_workspace
 // @router /:id/rule/:id2 [delete]
 func (o *CollaborativeAreaController) RemoveRule() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	caller := tools.NewHTTPCaller(paths) // caller used to send to peers
 	caller.Disabled = oclib.IsQueryParamsEquals(o.Ctx.Input, "is_remote", true)
 	id := o.Ctx.Input.Param(":id")
 	id2 := o.Ctx.Input.Param(":id2")
-	r := oclib.LoadOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), id)
+	r := oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, nil).LoadOne(id)
 	shared := r.ToCollaborativeArea()
 	newRules := []string{}
 	if shared != nil && slices.Contains(shared.Rules, id2) {
@@ -204,7 +233,8 @@ func (o *CollaborativeAreaController) RemoveRule() {
 		}
 		shared.Rules = newRules
 	}
-	o.Data["json"] = oclib.UpdateOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), shared.Serialize(), id, caller)
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, caller).UpdateOne(
+		shared.Serialize(shared), id)
 	o.ServeJSON()
 }
 
@@ -215,11 +245,12 @@ func (o *CollaborativeAreaController) RemoveRule() {
 // @Success 200 {shared workspace} models.shared_workspace
 // @router /:id/workspace/:id2 [post]
 func (o *CollaborativeAreaController) AddWorkspace() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	caller := tools.NewHTTPCaller(paths) // caller used to send to peers
 	caller.Disabled = oclib.IsQueryParamsEquals(o.Ctx.Input, "is_remote", true)
 	id := o.Ctx.Input.Param(":id")
 	id2 := o.Ctx.Input.Param(":id2")
-	r := oclib.LoadOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), id)
+	r := oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, nil).LoadOne(id)
 	if r.Code != 200 {
 		o.Data["json"] = r
 		o.ServeJSON()
@@ -229,7 +260,8 @@ func (o *CollaborativeAreaController) AddWorkspace() {
 	if shared != nil && !slices.Contains(shared.Workspaces, id2) {
 		shared.Workspaces = append(shared.Workspaces, id2)
 	}
-	o.Data["json"] = oclib.UpdateOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), shared.Serialize(), id, caller)
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, caller).UpdateOne(
+		shared.Serialize(shared), id)
 	o.ServeJSON()
 }
 
@@ -240,16 +272,18 @@ func (o *CollaborativeAreaController) AddWorkspace() {
 // @Success 200 {shared workspace} models.shared_workspace
 // @router /:id/workflow/:id2 [post]
 func (o *CollaborativeAreaController) AddWorkflow() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	caller := tools.NewHTTPCaller(paths) // caller used to send to peers
 	caller.Disabled = oclib.IsQueryParamsEquals(o.Ctx.Input, "is_remote", true)
 	id := o.Ctx.Input.Param(":id")
 	id2 := o.Ctx.Input.Param(":id2")
-	r := oclib.LoadOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), id)
+	r := oclib.NewRequest(oclib.LibDataEnum(oclib.RULE), user, peerID, groups, nil).LoadOne(id)
 	shared := r.ToCollaborativeArea()
 	if shared != nil && !slices.Contains(shared.Workflows, id2) {
 		shared.Workflows = append(shared.Workflows, id2)
 	}
-	o.Data["json"] = oclib.UpdateOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), shared.Serialize(), id, caller)
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, caller).UpdateOne(
+		shared.Serialize(shared), id)
 	o.ServeJSON()
 }
 
@@ -260,16 +294,29 @@ func (o *CollaborativeAreaController) AddWorkflow() {
 // @Success 200 {shared workspace} models.shared_workspace
 // @router /:id/peer/:id2 [post]
 func (o *CollaborativeAreaController) AddPeer() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	caller := tools.NewHTTPCaller(paths) // caller used to send to peers
 	caller.Disabled = oclib.IsQueryParamsEquals(o.Ctx.Input, "is_remote", true)
 	id := o.Ctx.Input.Param(":id")
 	id2 := o.Ctx.Input.Param(":id2")
-	r := oclib.LoadOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), id)
+	r := oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, nil).LoadOne(id)
 	shared := r.ToCollaborativeArea()
-	if shared != nil && !slices.Contains(shared.Peers, id2) {
-		shared.Peers = append(shared.Peers, id2)
+	if shared.AllowedPeersGroup != nil {
+		keys := make([]string, len(shared.AllowedPeersGroup))
+		i := 0
+		for k := range shared.AllowedPeersGroup {
+			keys[i] = k
+			i++
+		}
+		if shared != nil && !slices.Contains(keys, id2) {
+			if config.GetConfig().Whitelist {
+				shared.AllowedPeersGroup[id2] = []string{"*"}
+			} else {
+				shared.AllowedPeersGroup[id2] = []string{}
+			}
+		}
 	}
-	o.Data["json"] = oclib.UpdateOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), shared.Serialize(), id, caller)
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, caller).UpdateOne(shared.Serialize(shared), id)
 	o.ServeJSON()
 }
 
@@ -280,16 +327,17 @@ func (o *CollaborativeAreaController) AddPeer() {
 // @Success 200 {shared workspace} models.shared_workspace
 // @router /:id/rule/:id2 [post]
 func (o *CollaborativeAreaController) AddRule() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	caller := tools.NewHTTPCaller(paths) // caller used to send to peers
 	caller.Disabled = oclib.IsQueryParamsEquals(o.Ctx.Input, "is_remote", true)
 	id := o.Ctx.Input.Param(":id")
 	id2 := o.Ctx.Input.Param(":id2")
-	r := oclib.LoadOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), id)
+	r := oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, nil).LoadOne(id)
 	shared := r.ToCollaborativeArea()
 	if shared != nil && !slices.Contains(shared.Rules, id2) {
 		shared.Rules = append(shared.Rules, id2)
 	}
-	o.Data["json"] = oclib.UpdateOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), shared.Serialize(), id, caller)
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, caller).UpdateOne(shared.Serialize(shared), id)
 	o.ServeJSON()
 }
 
@@ -299,9 +347,10 @@ func (o *CollaborativeAreaController) AddRule() {
 // @Success 200 {shared workspace} delete success!
 // @router /:id [delete]
 func (o *CollaborativeAreaController) Delete() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	id := o.Ctx.Input.Param(":id")
 	caller := tools.NewHTTPCaller(paths) // caller used to send to peers
 	caller.Disabled = oclib.IsQueryParamsEquals(o.Ctx.Input, "is_remote", true)
-	o.Data["json"] = oclib.DeleteOne(oclib.LibDataEnum(tools.COLLABORATIVE_AREA), id, caller)
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.COLLABORATIVE_AREA), user, peerID, groups, caller).DeleteOne(id)
 	o.ServeJSON()
 }
diff --git a/controllers/rule.go b/controllers/rule.go
index 2f8b860..2213b33 100644
--- a/controllers/rule.go
+++ b/controllers/rule.go
@@ -15,12 +15,15 @@ type RuleController struct {
 // @Title Search
 // @Description search rule
 // @Param	search		path 	string	true		"the word search you want to get"
+// @Param	is_draft		query 	string	false		"draft wished"
 // @Success 200 {rule} models.rule
 // @router /search/:search [get]
 func (o *RuleController) Search() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	// store and return Id or post with UUID
 	search := o.Ctx.Input.Param(":search")
-	o.Data["json"] = oclib.Search(nil, search, oclib.LibDataEnum(oclib.RULE))
+	isDraft := o.Ctx.Input.Query("is_draft")
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.RULE), user, peerID, groups, nil).Search(nil, search, isDraft == "true")
 	o.ServeJSON()
 }
 
@@ -31,11 +34,12 @@ func (o *RuleController) Search() {
 // @Success 200 {rule} models.rule
 // @router /:id [put]
 func (o *RuleController) Put() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	// store and return ID or post with UUID
 	var res map[string]interface{}
 	id := o.Ctx.Input.Param(":id")
 	json.Unmarshal(o.Ctx.Input.CopyBody(10000), &res)
-	o.Data["json"] = oclib.UpdateOne(oclib.LibDataEnum(oclib.RULE), res, id)
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.RULE), user, peerID, groups, nil).UpdateOne(res, id)
 	o.ServeJSON()
 }
 
@@ -45,18 +49,22 @@ func (o *RuleController) Put() {
 // @Success 200 {rule} models.rule
 // @router / [post]
 func (o *RuleController) Post() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	var res map[string]interface{}
 	json.Unmarshal(o.Ctx.Input.CopyBody(10000), &res)
-	o.Data["json"] = oclib.StoreOne(oclib.LibDataEnum(oclib.RULE), res)
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.RULE), user, peerID, groups, nil).StoreOne(res)
 	o.ServeJSON()
 }
 
 // @Title GetAll
 // @Description find rule by id
+// @Param	is_draft		query 	string	false		"draft wished"
 // @Success 200 {rule} models.rule
 // @router / [get]
 func (o *RuleController) GetAll() {
-	o.Data["json"] = oclib.LoadAll(oclib.LibDataEnum(oclib.RULE))
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
+	isDraft := o.Ctx.Input.Query("is_draft")
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.RULE), user, peerID, groups, nil).LoadAll(isDraft == "true")
 	o.ServeJSON()
 }
 
@@ -66,8 +74,9 @@ func (o *RuleController) GetAll() {
 // @Success 200 {rule} models.rule
 // @router /:id [get]
 func (o *RuleController) Get() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	id := o.Ctx.Input.Param(":id")
-	o.Data["json"] = oclib.LoadOne(oclib.LibDataEnum(oclib.RULE), id)
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.RULE), user, peerID, groups, nil).LoadOne(id)
 	o.ServeJSON()
 }
 
@@ -77,7 +86,8 @@ func (o *RuleController) Get() {
 // @Success 200 {rule} delete success!
 // @router /:id [delete]
 func (o *RuleController) Delete() {
+	user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
 	id := o.Ctx.Input.Param(":id")
-	o.Data["json"] = oclib.DeleteOne(oclib.LibDataEnum(oclib.RULE), id)
+	o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.RULE), user, peerID, groups, nil).DeleteOne(id)
 	o.ServeJSON()
 }
diff --git a/go.mod b/go.mod
index 6ec9784..c02d970 100644
--- a/go.mod
+++ b/go.mod
@@ -5,12 +5,13 @@ go 1.22.0
 toolchain go1.22.4
 
 require (
-	cloud.o-forge.io/core/oc-lib v0.0.0-20241121074503-15ca06aba883
+	cloud.o-forge.io/core/oc-lib v0.0.0-20250117152246-b85ca8674b27
 	github.com/beego/beego/v2 v2.3.1
 )
 
 require (
 	github.com/beorn7/perks v1.0.1 // indirect
+	github.com/biter777/countries v1.7.5 // indirect
 	github.com/cespare/xxhash/v2 v2.3.0 // indirect
 	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
 	github.com/gabriel-vasile/mimetype v1.4.6 // indirect
@@ -24,6 +25,7 @@ require (
 	github.com/klauspost/compress v1.17.11 // indirect
 	github.com/kr/text v0.2.0 // indirect
 	github.com/leodido/go-urn v1.4.0 // indirect
+	github.com/marcinwyszynski/geopoint v0.0.0-20140302213024-cf2a6f750c5b // indirect
 	github.com/mattn/go-colorable v0.1.13 // indirect
 	github.com/mattn/go-isatty v0.0.20 // indirect
 	github.com/mitchellh/mapstructure v1.5.0 // indirect
@@ -37,6 +39,7 @@ require (
 	github.com/prometheus/client_model v0.6.1 // indirect
 	github.com/prometheus/common v0.60.1 // indirect
 	github.com/prometheus/procfs v0.15.1 // indirect
+	github.com/robfig/cron v1.2.0 // indirect
 	github.com/robfig/cron/v3 v3.0.1 // indirect
 	github.com/rogpeppe/go-internal v1.11.0 // indirect
 	github.com/rs/zerolog v1.33.0 // indirect
diff --git a/go.sum b/go.sum
index 81359c7..72128d1 100644
--- a/go.sum
+++ b/go.sum
@@ -54,6 +54,76 @@ cloud.o-forge.io/core/oc-lib v0.0.0-20241121071546-e9b3a65a0ec6 h1:AdUkzaX63VF3f
 cloud.o-forge.io/core/oc-lib v0.0.0-20241121071546-e9b3a65a0ec6/go.mod h1:ya7Q+zHhaKM+XF6sAJ+avqHEVzaMnFJQih2X3TlTlGo=
 cloud.o-forge.io/core/oc-lib v0.0.0-20241121074503-15ca06aba883 h1:JdHJT8vuup4pJCC7rjiOe0/qD7at6400ml5zZHjEeUo=
 cloud.o-forge.io/core/oc-lib v0.0.0-20241121074503-15ca06aba883/go.mod h1:ya7Q+zHhaKM+XF6sAJ+avqHEVzaMnFJQih2X3TlTlGo=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241202081145-cb21db672bb5 h1:qxXC6fkEa8bLTo0qn3VrB55tfxyjHQQa/0n97piJhNI=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241202081145-cb21db672bb5/go.mod h1:2IevepXviessA6m67fB6ZJhZSeEeoOYWbVqPS4dzkbg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241202121923-2ec6899a1865 h1:BhGzhy6gsEA7vthuq6KWyABsRuF4KV5NqOvfkygytGg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241202121923-2ec6899a1865/go.mod h1:2IevepXviessA6m67fB6ZJhZSeEeoOYWbVqPS4dzkbg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241202134851-9a2ed2351d7e h1:3U5JBdQRti2OpALLPhev6lkUi1TlYHgo2ADidOAfEAs=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241202134851-9a2ed2351d7e/go.mod h1:2IevepXviessA6m67fB6ZJhZSeEeoOYWbVqPS4dzkbg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241202152644-e2ddd7e4e6f9 h1:qUA6T5Pjq/pv6dZYH4PWktXmFiRnloDX84m1U5NhvLM=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241202152644-e2ddd7e4e6f9/go.mod h1:2IevepXviessA6m67fB6ZJhZSeEeoOYWbVqPS4dzkbg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241202155908-599a6144803e h1:3xGLiTDTgWHIIPDZyTo/clMIj+gQxnIDSE78s9/0wNE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241202155908-599a6144803e/go.mod h1:2IevepXviessA6m67fB6ZJhZSeEeoOYWbVqPS4dzkbg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241203073336-6042d47700fd h1:iDryCORnODgAvBe1Yi+RnIGjYgUSkAv7ZCnm+CUV18w=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241203073336-6042d47700fd/go.mod h1:2IevepXviessA6m67fB6ZJhZSeEeoOYWbVqPS4dzkbg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241203082527-2924ccd23b5c h1:3ghuxLEI3JXicDYoFx4YnkLauLl0Nq9UErjpL/2SqEU=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241203082527-2924ccd23b5c/go.mod h1:2IevepXviessA6m67fB6ZJhZSeEeoOYWbVqPS4dzkbg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241203090110-471e0c9d9b48 h1:kVTpROPipS4YtROH9vAGZw21OMLNR48qbYedCngGThw=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241203090110-471e0c9d9b48/go.mod h1:2IevepXviessA6m67fB6ZJhZSeEeoOYWbVqPS4dzkbg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241203095728-ea55c94c7328 h1:7iK2HzMm0EEEF60ajUVT/6jwqIirduww5Xa3191XS4I=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241203095728-ea55c94c7328/go.mod h1:2IevepXviessA6m67fB6ZJhZSeEeoOYWbVqPS4dzkbg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241203105751-4b88da8ff66d h1:iIo+AMQ09MshkKKN8K8pd1ooLaigAYlnUUnQAaCidLo=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241203105751-4b88da8ff66d/go.mod h1:2IevepXviessA6m67fB6ZJhZSeEeoOYWbVqPS4dzkbg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241203115141-6681c455d8e0 h1:RnHCONn0oYbEaTN1wDIeOAEM12cCZQRtvjBCVCb0b1Y=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241203115141-6681c455d8e0/go.mod h1:2IevepXviessA6m67fB6ZJhZSeEeoOYWbVqPS4dzkbg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241204103308-fd01f535a131 h1:FdUY8b8xTdVzQ9wlphlo8TlbQif76V9oxGDYq26TsAs=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241204103308-fd01f535a131/go.mod h1:2IevepXviessA6m67fB6ZJhZSeEeoOYWbVqPS4dzkbg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241204111455-1fcbc7c08ab0 h1:cBr4m2tcLf+dZufrjYvhvcsSqXcRDeyhnq5c5HY15po=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241204111455-1fcbc7c08ab0/go.mod h1:2IevepXviessA6m67fB6ZJhZSeEeoOYWbVqPS4dzkbg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241205082103-fbbce7817b73 h1:g96KMOxdhvM7x6YFqJfd08wybRzCLEvol7HfhKJfxO4=
+cloud.o-forge.io/core/oc-lib v0.0.0-20241205082103-fbbce7817b73/go.mod h1:2IevepXviessA6m67fB6ZJhZSeEeoOYWbVqPS4dzkbg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250110164331-5255ffc2f728 h1:3p1G82xZmEAu2OEyY5HM42Cfbb1J887P9lSoRKNhgg8=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250110164331-5255ffc2f728/go.mod h1:2IevepXviessA6m67fB6ZJhZSeEeoOYWbVqPS4dzkbg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250113102407-21a7ff90104a h1:rrLSuAHI/TGOTm5d7Bffu+qf4EnmPguOll5x5nG/3Tc=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250113102407-21a7ff90104a/go.mod h1:VgWEn23ddKySWXrwPMhqtiBjTJnbm5t7yWjzfvNxbbI=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250113114256-11905339bb24 h1:Kc51xKbnyfeafHpOJP7mWh9InNGqZUwcJR46008D+Eg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250113114256-11905339bb24/go.mod h1:VgWEn23ddKySWXrwPMhqtiBjTJnbm5t7yWjzfvNxbbI=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250113124812-6e5c87379649 h1:dmtrmNDdTR/2R3HjaIbPdu5LZViPzigwSjU207NXCxI=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250113124812-6e5c87379649/go.mod h1:VgWEn23ddKySWXrwPMhqtiBjTJnbm5t7yWjzfvNxbbI=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250113135241-a0f436b3e162 h1:oGP40P/uUngU7stnsRdx0jwxZGc+pzLzrMlUjEBSy0M=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250113135241-a0f436b3e162/go.mod h1:VgWEn23ddKySWXrwPMhqtiBjTJnbm5t7yWjzfvNxbbI=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250114071722-1c32cd2d12df h1:T52jgXQddoxwe+embR26Fwmz4G2jkl4QpYVHGtiLUNI=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250114071722-1c32cd2d12df/go.mod h1:VgWEn23ddKySWXrwPMhqtiBjTJnbm5t7yWjzfvNxbbI=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250114081637-918006302bb4 h1:AwCbDHjvUz9iQaF7hgYWyabVF/EzSSSk5bCNgntNJ6c=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250114081637-918006302bb4/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250114105339-b782248da741 h1:akAQLlcAXDtUhbNHbona9xJrHCzK9jxlvsDsEpVP1fg=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250114105339-b782248da741/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250114135055-1a4694c8913a h1:AxnecA1YKOZ81OKb1akK2Qc/0UNDUxdjSww7ALyehas=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250114135055-1a4694c8913a/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250115082026-ad69c0495144 h1:MZ90rw4SKL0dqL/Lb+7E54vkk9fb8W6X0UJo9UW/XBk=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250115082026-ad69c0495144/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250115095644-be3803039583 h1:6My1sqjvqgHnC4TlE7RsZQHC8AVhad0gZl8uOvLTM9o=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250115095644-be3803039583/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250115102820-0e0540af43d0 h1:AcHC2WIeHOSjz5xe7OsjMi39EevxdY2O/9q0VMkDRz0=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250115102820-0e0540af43d0/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250116091455-68f418928395 h1:u4myLPGqBbzprWHg6713k5a++4yiq1ujlVy7yrMkZ9g=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250116091455-68f418928395/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250116142544-a4a249bab828 h1:yMDBDTs7LECyueUfh0iug502GN8GodVpQSl/gZchUjU=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250116142544-a4a249bab828/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250117081640-450fab437cb7 h1:SV9U48sR09cNRl48489lQHrrKJFtTMQoQcRhmtsLTYQ=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250117081640-450fab437cb7/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250117090737-b990fe42d375 h1:UsPWfbVgvUcOC3BtD8B9dUQfv/FnRF4IZGrYxUJr1iM=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250117090737-b990fe42d375/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250117100508-d44fb976e4ff h1:GaLrVn6ame6BV7pfUB2xeHCCJLBECRiCCpPj6zteL+s=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250117100508-d44fb976e4ff/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250117121920-ed787683f47b h1:3wap+dPPplJkDglE5toKfdFUmjobAeIJWdiRtCQ3xkQ=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250117121920-ed787683f47b/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250117124801-e5c7dbe4cb96 h1:opQ/Uku27DOKAqDcKC9k6J9H5Tj9bNyKdHnJnD3U850=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250117124801-e5c7dbe4cb96/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250117135417-c63a1fef6c48 h1:dEebv8ZV5rt6BYPkcK6HOts+OPqkSxkKp5zn1lCq1vs=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250117135417-c63a1fef6c48/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250117152246-b85ca8674b27 h1:QEIj90eIoYsjs1uekbI3Nu48KDWmzGV7ugcr9agJbYI=
+cloud.o-forge.io/core/oc-lib v0.0.0-20250117152246-b85ca8674b27/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/beego/beego/v2 v2.3.0 h1:iECVwzm6egw6iw6tkWrEDqXG4NQtKLQ6QBSYqlM6T/I=
 github.com/beego/beego/v2 v2.3.0/go.mod h1:Ob/5BJ9fIKZLd4s9ZV3o9J6odkkIyL83et+p98gyYXo=
@@ -62,6 +132,8 @@ github.com/beego/beego/v2 v2.3.1/go.mod h1:5cqHsOHJIxkq44tBpRvtDe59GuVRVv/9/tyVD
 github.com/beego/beego/v2 v2.3.2/go.mod h1:5cqHsOHJIxkq44tBpRvtDe59GuVRVv/9/tyVDxd5ce4=
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/biter777/countries v1.7.5 h1:MJ+n3+rSxWQdqVJU8eBy9RqcdH6ePPn4PJHocVWUa+Q=
+github.com/biter777/countries v1.7.5/go.mod h1:1HSpZ526mYqKJcpT5Ti1kcGQ0L0SrXWIaptUWjFfv2E=
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/coreos/etcd v3.3.17+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
@@ -123,6 +195,8 @@ github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+
 github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
 github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
 github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/marcinwyszynski/geopoint v0.0.0-20140302213024-cf2a6f750c5b h1:XBF8THPBy28s2ryI7+/Jf/847unLWxYMpJveX5Kox+0=
+github.com/marcinwyszynski/geopoint v0.0.0-20140302213024-cf2a6f750c5b/go.mod h1:z1oqhOuuYpPHmUmAK2aNygKFlPdb4o3PppQnVTRFdrI=
 github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
 github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
 github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
@@ -166,6 +240,8 @@ github.com/prometheus/common v0.60.1 h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPA
 github.com/prometheus/common v0.60.1/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw=
 github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
 github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
+github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ=
+github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
 github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
 github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
 github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
diff --git a/oc-shared b/oc-shared
index 895827b..4833f21 100755
Binary files a/oc-shared and b/oc-shared differ
diff --git a/swagger/swagger.json b/swagger/swagger.json
index d3379b5..f7ecb2f 100644
--- a/swagger/swagger.json
+++ b/swagger/swagger.json
@@ -22,6 +22,14 @@
                 ],
                 "description": "find shared workspace by id\n\u003cbr\u003e",
                 "operationId": "CollaborativeAreaController.GetAll",
+                "parameters": [
+                    {
+                        "in": "query",
+                        "name": "is_draft",
+                        "description": "draft wished",
+                        "type": "string"
+                    }
+                ],
                 "responses": {
                     "200": {
                         "description": "{shared_workspace} models.shared_workspace"
@@ -66,6 +74,12 @@
                         "description": "the word search you want to get",
                         "required": true,
                         "type": "string"
+                    },
+                    {
+                        "in": "query",
+                        "name": "is_draft",
+                        "description": "draft wished",
+                        "type": "string"
                     }
                 ],
                 "responses": {
@@ -357,7 +371,7 @@
                     "collaborative_area"
                 ],
                 "description": "find shared workspace by id\n\u003cbr\u003e",
-                "operationId": "CollaborativeAreaController.Add Workspace",
+                "operationId": "CollaborativeAreaController.Remove Workspace",
                 "parameters": [
                     {
                         "in": "path",
diff --git a/swagger/swagger.yml b/swagger/swagger.yml
index 22bb2e7..cc5cb24 100644
--- a/swagger/swagger.yml
+++ b/swagger/swagger.yml
@@ -20,6 +20,11 @@ paths:
         find shared workspace by id
         <br>
       operationId: CollaborativeAreaController.GetAll
+      parameters:
+      - in: query
+        name: is_draft
+        description: draft wished
+        type: string
       responses:
         "200":
           description: '{shared_workspace} models.shared_workspace'
@@ -252,7 +257,7 @@ paths:
       description: |-
         find shared workspace by id
         <br>
-      operationId: CollaborativeAreaController.Add Workspace
+      operationId: CollaborativeAreaController.Remove Workspace
       parameters:
       - in: path
         name: id
@@ -281,6 +286,10 @@ paths:
         description: the word search you want to get
         required: true
         type: string
+      - in: query
+        name: is_draft
+        description: draft wished
+        type: string
       responses:
         "200":
           description: '{shared workspace} models.shared_workspace'