Subject: [PATCH links] Adding `deleteTag` and `renameTag` mutations to the GraphQL API.

From: Peter Sanchez <[email-masked]>
Date: Sat, 16 Aug 2025 17:03:11 -0600

Changelog-added: New mutations (deleteTag and renameTag) to the GraphQL
  api.
Changelog-updated: API version
---
 api/api_test.go                               |  232 ++
 api/graph/generated.go                        |  911 ++++---
 api/graph/model/models_gen.go                 |   22 +-
 api/graph/schema.graphqls                     |   30 +-
 api/graph/schema.resolvers.go                 |  210 +-
 internal/translations/catalog.go              | 2257 +++++++++--------
 .../translations/locales/en/out.gotext.json   |   42 +-
 .../locales/es/messages.gotext.json           |   30 +-
 .../translations/locales/es/out.gotext.json   |   30 +-
 models/audit_log.go                           |    3 +
 models/organization.go                        |  112 +-
 11 files changed, 2303 insertions(+), 1576 deletions(-)

diff --git a/api/api_test.go b/api/api_test.go
index 50fb214..4e41f83 100644
--- a/api/api_test.go
+++ b/api/api_test.go
@@ -342,6 +342,7 @@ func TestAPI(t *testing.T) {
 	cmd.RunMigrations(t, srv.DB)
 	defer srv.Shutdown()
 	go srv.Run()
+	time.Sleep(100 * time.Millisecond) // Wait for server to be ready
 	ctx := server.ServerContext(context.Background(), srv)
 	ctx = auth.Context(ctx, test.NewTestUser(1, false, false, true, true))
 	ctx = crypto.Context(ctx, entropy)
@@ -2509,4 +2510,235 @@ func TestAPI(t *testing.T) {
 		c.True(listTags["common-tag"])
 		c.True(listTags["list-only"])
 	})
+
+	t.Run("delete tag success", func(t *testing.T) {
+		type GraphQLResponse struct {
+			DeleteTag struct {
+				Success bool   `json:"success"`
+				ID      string `json:"objectId"`
+			} `json:"deleteTag"`
+		}
+
+		var result GraphQLResponse
+		op := gqlclient.NewOperation(
+			`mutation DeleteTag($orgSlug: String!, $service: DomainService!, $tag: String!) {
+				deleteTag(input: {orgSlug: $orgSlug, service: $service, tag: $tag}) {
+					success
+					objectId
+				}
+			}`)
+		op.Var("orgSlug", "personal-org")
+		op.Var("service", "LINKS")
+		op.Var("tag", "links-only")
+		err := links.Execute(ctx, op, &result)
+		c.NoError(err)
+		c.Equal(true, result.DeleteTag.Success)
+		c.Equal("links-only", result.DeleteTag.ID)
+
+		op = gqlclient.NewOperation(
+			`mutation DeleteTag($orgSlug: String!, $service: DomainService!, $tag: String!) {
+				deleteTag(input: {orgSlug: $orgSlug, service: $service, tag: $tag}) {
+					success
+					objectId
+				}
+			}`)
+		op.Var("orgSlug", "personal-org")
+		op.Var("service", "SHORT")
+		op.Var("tag", "short-only")
+		err = links.Execute(ctx, op, &result)
+		c.NoError(err)
+		c.Equal(true, result.DeleteTag.Success)
+		c.Equal("short-only", result.DeleteTag.ID)
+
+		op = gqlclient.NewOperation(
+			`mutation DeleteTag($orgSlug: String!, $service: DomainService!, $tag: String!) {
+				deleteTag(input: {orgSlug: $orgSlug, service: $service, tag: $tag}) {
+					success
+					objectId
+				}
+			}`)
+		op.Var("orgSlug", "personal-org")
+		op.Var("service", "LIST")
+		op.Var("tag", "list-only")
+		err = links.Execute(ctx, op, &result)
+		c.NoError(err)
+		c.Equal(true, result.DeleteTag.Success)
+		c.Equal("list-only", result.DeleteTag.ID)
+	})
+
+	t.Run("delete tag errors", func(t *testing.T) {
+		type GraphQLResponse struct {
+			DeleteTag struct {
+				Success bool   `json:"success"`
+				ID      string `json:"objectId"`
+			} `json:"deleteTag"`
+		}
+
+		var result GraphQLResponse
+		op := gqlclient.NewOperation(
+			`mutation DeleteTag($orgSlug: String!, $service: DomainService!, $tag: String!) {
+				deleteTag(input: {orgSlug: $orgSlug, service: $service, tag: $tag}) {
+					success
+					objectId
+				}
+			}`)
+		op.Var("orgSlug", "personal-org")
+		op.Var("service", "LINKS")
+		op.Var("tag", "non-existent-tag")
+		err := links.Execute(ctx, op, &result)
+		c.Error(err)
+		c.Equal("gqlclient: server failure: Tag not found.", err.Error())
+
+		op = gqlclient.NewOperation(
+			`mutation DeleteTag($orgSlug: String!, $service: DomainService!, $tag: String!) {
+				deleteTag(input: {orgSlug: $orgSlug, service: $service, tag: $tag}) {
+					success
+					objectId
+				}
+			}`)
+		op.Var("orgSlug", "non-existent-org")
+		op.Var("service", "LINKS")
+		op.Var("tag", "common-tag")
+		err = links.Execute(ctx, op, &result)
+		c.Error(err)
+		c.Equal("gqlclient: server failure: Organization not found.", err.Error())
+	})
+
+	t.Run("delete tag unauthorized", func(t *testing.T) {
+		otherUserCTX := server.ServerContext(context.Background(), srv)
+		otherUserCTX = auth.Context(otherUserCTX, test.NewTestUser(2, false, false, true, true))
+		otherUserCTX = crypto.Context(otherUserCTX, entropy)
+
+		type GraphQLResponse struct {
+			DeleteTag struct {
+				Success bool   `json:"success"`
+				ID      string `json:"objectId"`
+			} `json:"deleteTag"`
+		}
+
+		var result GraphQLResponse
+		op := gqlclient.NewOperation(
+			`mutation DeleteTag($orgSlug: String!, $service: DomainService!, $tag: String!) {
+				deleteTag(input: {orgSlug: $orgSlug, service: $service, tag: $tag}) {
+					success
+					objectId
+				}
+			}`)
+		op.Var("orgSlug", "personal-org")
+		op.Var("service", "LINKS")
+		op.Var("tag", "common-tag")
+		err := links.Execute(otherUserCTX, op, &result)
+		c.Error(err)
+		c.Equal("gqlclient: server failure: Organization not found.", err.Error())
+	})
+
+	t.Run("rename tag success", func(t *testing.T) {
+		type GraphQLResponse struct {
+			RenameTag struct {
+				Success bool   `json:"success"`
+				Message string `json:"message"`
+			} `json:"renameTag"`
+		}
+
+		var result GraphQLResponse
+		op := gqlclient.NewOperation(
+			`mutation RenameTag($orgSlug: String!, $service: DomainService!, $tag: String!, $newTag: String!) {
+				renameTag(input: {orgSlug: $orgSlug, service: $service, tag: $tag, newTag: $newTag}) {
+					success
+					message
+				}
+			}`)
+		op.Var("orgSlug", "personal-org")
+		op.Var("service", "LINKS")
+		op.Var("tag", "common-tag")
+		op.Var("newTag", "renamed-common-tag")
+		err := links.Execute(ctx, op, &result)
+		c.NoError(err)
+		c.Equal(true, result.RenameTag.Success)
+		c.NotEmpty(result.RenameTag.Message)
+
+		op = gqlclient.NewOperation(
+			`mutation RenameTag($orgSlug: String!, $service: DomainService!, $tag: String!, $newTag: String!) {
+				renameTag(input: {orgSlug: $orgSlug, service: $service, tag: $tag, newTag: $newTag}) {
+					success
+					message
+				}
+			}`)
+		op.Var("orgSlug", "personal-org")
+		op.Var("service", "SHORT")
+		op.Var("tag", "renamed-common-tag")
+		op.Var("newTag", "short-renamed-tag")
+		err = links.Execute(ctx, op, &result)
+		c.NoError(err)
+		c.Equal(true, result.RenameTag.Success)
+		c.NotEmpty(result.RenameTag.Message)
+	})
+
+	t.Run("rename tag errors", func(t *testing.T) {
+		type GraphQLResponse struct {
+			RenameTag struct {
+				Success bool   `json:"success"`
+				Message string `json:"message"`
+			} `json:"renameTag"`
+		}
+
+		var result GraphQLResponse
+		op := gqlclient.NewOperation(
+			`mutation RenameTag($orgSlug: String!, $service: DomainService!, $tag: String!, $newTag: String) {
+				renameTag(input: {orgSlug: $orgSlug, service: $service, tag: $tag, newTag: $newTag}) {
+					success
+					message
+				}
+			}`)
+		op.Var("orgSlug", "personal-org")
+		op.Var("service", "LINKS")
+		op.Var("tag", "common-tag")
+		err := links.Execute(ctx, op, &result)
+		c.Error(err)
+		c.Equal("gqlclient: server failure: New tag is required.", err.Error())
+
+		op = gqlclient.NewOperation(
+			`mutation RenameTag($orgSlug: String!, $service: DomainService!, $tag: String!, $newTag: String!) {
+				renameTag(input: {orgSlug: $orgSlug, service: $service, tag: $tag, newTag: $newTag}) {
+					success
+					message
+				}
+			}`)
+		op.Var("orgSlug", "personal-org")
+		op.Var("service", "LINKS")
+		op.Var("tag", "non-existent-tag")
+		op.Var("newTag", "new-tag-name")
+		err = links.Execute(ctx, op, &result)
+		c.Error(err)
+		c.Equal("gqlclient: server failure: Tag not found.", err.Error())
+	})
+
+	t.Run("rename tag unauthorized", func(t *testing.T) {
+		otherUserCTX := server.ServerContext(context.Background(), srv)
+		otherUserCTX = auth.Context(otherUserCTX, test.NewTestUser(2, false, false, true, true))
+		otherUserCTX = crypto.Context(otherUserCTX, entropy)
+
+		type GraphQLResponse struct {
+			RenameTag struct {
+				Success bool   `json:"success"`
+				Message string `json:"message"`
+			} `json:"renameTag"`
+		}
+
+		var result GraphQLResponse
+		op := gqlclient.NewOperation(
+			`mutation RenameTag($orgSlug: String!, $service: DomainService!, $tag: String!, $newTag: String!) {
+				renameTag(input: {orgSlug: $orgSlug, service: $service, tag: $tag, newTag: $newTag}) {
+					success
+					message
+				}
+			}`)
+		op.Var("orgSlug", "personal-org")
+		op.Var("service", "LINKS")
+		op.Var("tag", "common-tag")
+		op.Var("newTag", "unauthorized-rename")
+		err := links.Execute(otherUserCTX, op, &result)
+		c.Error(err)
+		c.Equal("gqlclient: server failure: Organization not found.", err.Error())
+	})
 }
diff --git a/api/graph/generated.go b/api/graph/generated.go
index 33c8990..5acb2f3 100644
--- a/api/graph/generated.go
+++ b/api/graph/generated.go
@@ -64,11 +64,6 @@ type DirectiveRoot struct {
 }
 
 type ComplexityRoot struct {
-	AddMemberPayload struct {
-		Message func(childComplexity int) int
-		Success func(childComplexity int) int
-	}
-
 	AdminBillingStats struct {
 		ActiveSubscriptions        func(childComplexity int) int
 		CanceledSubscription       func(childComplexity int) int
@@ -166,11 +161,6 @@ type ComplexityRoot struct {
 		Result   func(childComplexity int) int
 	}
 
-	FollowPayload struct {
-		Message func(childComplexity int) int
-		Success func(childComplexity int) int
-	}
-
 	HTMLMeta struct {
 		Description func(childComplexity int) int
 		Image       func(childComplexity int) int
@@ -262,8 +252,10 @@ type ComplexityRoot struct {
 		DeleteListingLink      func(childComplexity int, id int) int
 		DeleteMember           func(childComplexity int, orgSlug string, email string) int
 		DeleteQRCode           func(childComplexity int, id int) int
+		DeleteTag              func(childComplexity int, input model.TagInput) int
 		Follow                 func(childComplexity int, orgSlug string) int
 		Register               func(childComplexity int, input *model.RegisterInput) int
+		RenameTag              func(childComplexity int, input model.TagInput) int
 		SendRegisterInvitation func(childComplexity int, toEmail string) int
 		Unfollow               func(childComplexity int, orgSlug string) int
 		UpdateAdminDomain      func(childComplexity int, input model.UpdateAdminDomainInput) int
@@ -287,6 +279,11 @@ type ComplexityRoot struct {
 		Valid  func(childComplexity int) int
 	}
 
+	OperationPayload struct {
+		Message func(childComplexity int) int
+		Success func(childComplexity int) int
+	}
+
 	OrgLink struct {
 		ArchiveURL     func(childComplexity int) int
 		Author         func(childComplexity int) int
@@ -505,9 +502,9 @@ type MutationResolver interface {
 	UpdateLink(ctx context.Context, input *model.UpdateLinkInput) (*models.OrgLink, error)
 	DeleteLink(ctx context.Context, hash string) (*model.DeletePayload, error)
 	AddNote(ctx context.Context, input *model.NoteInput) (*models.OrgLink, error)
-	AddMember(ctx context.Context, input *model.MemberInput) (*model.AddMemberPayload, error)
-	DeleteMember(ctx context.Context, orgSlug string, email string) (*model.AddMemberPayload, error)
-	ConfirmMember(ctx context.Context, key string) (*model.AddMemberPayload, error)
+	AddMember(ctx context.Context, input *model.MemberInput) (*model.OperationPayload, error)
+	DeleteMember(ctx context.Context, orgSlug string, email string) (*model.OperationPayload, error)
+	ConfirmMember(ctx context.Context, key string) (*model.OperationPayload, error)
 	Register(ctx context.Context, input *model.RegisterInput) (*models.User, error)
 	CompleteRegister(ctx context.Context, input *model.CompleteRegisterInput) (*models.User, error)
 	UpdateProfile(ctx context.Context, input *model.ProfileInput) (*models.User, error)
@@ -524,8 +521,10 @@ type MutationResolver interface {
 	DeleteListingLink(ctx context.Context, id int) (*model.DeletePayload, error)
 	AddQRCode(ctx context.Context, input model.AddQRCodeInput) (*models.QRCode, error)
 	DeleteQRCode(ctx context.Context, id int) (*model.DeletePayload, error)
-	Follow(ctx context.Context, orgSlug string) (*model.FollowPayload, error)
-	Unfollow(ctx context.Context, orgSlug string) (*model.FollowPayload, error)
+	Follow(ctx context.Context, orgSlug string) (*model.OperationPayload, error)
+	Unfollow(ctx context.Context, orgSlug string) (*model.OperationPayload, error)
+	DeleteTag(ctx context.Context, input model.TagInput) (*model.DeletePayload, error)
+	RenameTag(ctx context.Context, input model.TagInput) (*model.OperationPayload, error)
 	UpdateAdminOrg(ctx context.Context, input model.AdminUpdateOrgInput) (*models.Organization, error)
 	AddAdminDomain(ctx context.Context, input model.AdminDomainInput) (*models.Domain, error)
 	UpdateAdminDomain(ctx context.Context, input model.UpdateAdminDomainInput) (*models.Domain, error)
@@ -605,20 +604,6 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin
 	_ = ec
 	switch typeName + "." + field {
 
-	case "AddMemberPayload.message":
-		if e.complexity.AddMemberPayload.Message == nil {
-			break
-		}
-
-		return e.complexity.AddMemberPayload.Message(childComplexity), true
-
-	case "AddMemberPayload.success":
-		if e.complexity.AddMemberPayload.Success == nil {
-			break
-		}
-
-		return e.complexity.AddMemberPayload.Success(childComplexity), true
-
 	case "AdminBillingStats.activeSubscriptions":
 		if e.complexity.AdminBillingStats.ActiveSubscriptions == nil {
 			break
@@ -1046,20 +1031,6 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin
 
 		return e.complexity.DomainCursor.Result(childComplexity), true
 
-	case "FollowPayload.message":
-		if e.complexity.FollowPayload.Message == nil {
-			break
-		}
-
-		return e.complexity.FollowPayload.Message(childComplexity), true
-
-	case "FollowPayload.success":
-		if e.complexity.FollowPayload.Success == nil {
-			break
-		}
-
-		return e.complexity.FollowPayload.Success(childComplexity), true
-
 	case "HTMLMeta.description":
 		if e.complexity.HTMLMeta.Description == nil {
 			break
@@ -1617,6 +1588,18 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin
 
 		return e.complexity.Mutation.DeleteQRCode(childComplexity, args["id"].(int)), true
 
+	case "Mutation.deleteTag":
+		if e.complexity.Mutation.DeleteTag == nil {
+			break
+		}
+
+		args, err := ec.field_Mutation_deleteTag_args(ctx, rawArgs)
+		if err != nil {
+			return 0, false
+		}
+
+		return e.complexity.Mutation.DeleteTag(childComplexity, args["input"].(model.TagInput)), true
+
 	case "Mutation.follow":
 		if e.complexity.Mutation.Follow == nil {
 			break
@@ -1641,6 +1624,18 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin
 
 		return e.complexity.Mutation.Register(childComplexity, args["input"].(*model.RegisterInput)), true
 
+	case "Mutation.renameTag":
+		if e.complexity.Mutation.RenameTag == nil {
+			break
+		}
+
+		args, err := ec.field_Mutation_renameTag_args(ctx, rawArgs)
+		if err != nil {
+			return 0, false
+		}
+
+		return e.complexity.Mutation.RenameTag(childComplexity, args["input"].(model.TagInput)), true
+
 	case "Mutation.sendRegisterInvitation":
 		if e.complexity.Mutation.SendRegisterInvitation == nil {
 			break
@@ -1801,6 +1796,20 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin
 
 		return e.complexity.NullString.Valid(childComplexity), true
 
+	case "OperationPayload.message":
+		if e.complexity.OperationPayload.Message == nil {
+			break
+		}
+
+		return e.complexity.OperationPayload.Message(childComplexity), true
+
+	case "OperationPayload.success":
+		if e.complexity.OperationPayload.Success == nil {
+			break
+		}
+
+		return e.complexity.OperationPayload.Success(childComplexity), true
+
 	case "OrgLink.archiveUrl":
 		if e.complexity.OrgLink.ArchiveURL == nil {
 			break
@@ -2911,6 +2920,7 @@ func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler {
 		ec.unmarshalInputPopularLinksInput,
 		ec.unmarshalInputProfileInput,
 		ec.unmarshalInputRegisterInput,
+		ec.unmarshalInputTagInput,
 		ec.unmarshalInputUpdateAdminDomainInput,
 		ec.unmarshalInputUpdateLinkInput,
 		ec.unmarshalInputUpdateLinkShortInput,
@@ -3275,6 +3285,17 @@ func (ec *executionContext) field_Mutation_deleteQRCode_args(ctx context.Context
 	return args, nil
 }
 
+func (ec *executionContext) field_Mutation_deleteTag_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) {
+	var err error
+	args := map[string]any{}
+	arg0, err := graphql.ProcessArgField(ctx, rawArgs, "input", ec.unmarshalNTagInput2linksᚋapiᚋgraphᚋmodelᚐTagInput)
+	if err != nil {
+		return nil, err
+	}
+	args["input"] = arg0
+	return args, nil
+}
+
 func (ec *executionContext) field_Mutation_follow_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) {
 	var err error
 	args := map[string]any{}
@@ -3297,6 +3318,17 @@ func (ec *executionContext) field_Mutation_register_args(ctx context.Context, ra
 	return args, nil
 }
 
+func (ec *executionContext) field_Mutation_renameTag_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) {
+	var err error
+	args := map[string]any{}
+	arg0, err := graphql.ProcessArgField(ctx, rawArgs, "input", ec.unmarshalNTagInput2linksᚋapiᚋgraphᚋmodelᚐTagInput)
+	if err != nil {
+		return nil, err
+	}
+	args["input"] = arg0
+	return args, nil
+}
+
 func (ec *executionContext) field_Mutation_sendRegisterInvitation_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) {
 	var err error
 	args := map[string]any{}
@@ -3818,94 +3850,6 @@ func (ec *executionContext) field___Type_fields_args(ctx context.Context, rawArg
 
 // region    **************************** field.gotpl *****************************
 
-func (ec *executionContext) _AddMemberPayload_success(ctx context.Context, field graphql.CollectedField, obj *model.AddMemberPayload) (ret graphql.Marshaler) {
-	fc, err := ec.fieldContext_AddMemberPayload_success(ctx, field)
-	if err != nil {
-		return graphql.Null
-	}
-	ctx = graphql.WithFieldContext(ctx, fc)
-	defer func() {
-		if r := recover(); r != nil {
-			ec.Error(ctx, ec.Recover(ctx, r))
-			ret = graphql.Null
-		}
-	}()
-	resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
-		ctx = rctx // use context from middleware stack in children
-		return obj.Success, nil
-	})
-	if err != nil {
-		ec.Error(ctx, err)
-		return graphql.Null
-	}
-	if resTmp == nil {
-		if !graphql.HasFieldError(ctx, fc) {
-			ec.Errorf(ctx, "must not be null")
-		}
-		return graphql.Null
-	}
-	res := resTmp.(bool)
-	fc.Result = res
-	return ec.marshalNBoolean2bool(ctx, field.Selections, res)
-}
-
-func (ec *executionContext) fieldContext_AddMemberPayload_success(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
-	fc = &graphql.FieldContext{
-		Object:     "AddMemberPayload",
-		Field:      field,
-		IsMethod:   false,
-		IsResolver: false,
-		Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
-			return nil, errors.New("field of type Boolean does not have child fields")
-		},
-	}
-	return fc, nil
-}
-
-func (ec *executionContext) _AddMemberPayload_message(ctx context.Context, field graphql.CollectedField, obj *model.AddMemberPayload) (ret graphql.Marshaler) {
-	fc, err := ec.fieldContext_AddMemberPayload_message(ctx, field)
-	if err != nil {
-		return graphql.Null
-	}
-	ctx = graphql.WithFieldContext(ctx, fc)
-	defer func() {
-		if r := recover(); r != nil {
-			ec.Error(ctx, ec.Recover(ctx, r))
-			ret = graphql.Null
-		}
-	}()
-	resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
-		ctx = rctx // use context from middleware stack in children
-		return obj.Message, nil
-	})
-	if err != nil {
-		ec.Error(ctx, err)
-		return graphql.Null
-	}
-	if resTmp == nil {
-		if !graphql.HasFieldError(ctx, fc) {
-			ec.Errorf(ctx, "must not be null")
-		}
-		return graphql.Null
-	}
-	res := resTmp.(string)
-	fc.Result = res
-	return ec.marshalNString2string(ctx, field.Selections, res)
-}
-
-func (ec *executionContext) fieldContext_AddMemberPayload_message(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
-	fc = &graphql.FieldContext{
-		Object:     "AddMemberPayload",
-		Field:      field,
-		IsMethod:   false,
-		IsResolver: false,
-		Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
-			return nil, errors.New("field of type String does not have child fields")
-		},
-	}
-	return fc, nil
-}
-
 func (ec *executionContext) _AdminBillingStats_activeSubscriptions(ctx context.Context, field graphql.CollectedField, obj *model.AdminBillingStats) (ret graphql.Marshaler) {
 	fc, err := ec.fieldContext_AdminBillingStats_activeSubscriptions(ctx, field)
 	if err != nil {
@@ -6962,94 +6906,6 @@ func (ec *executionContext) fieldContext_DomainCursor_pageInfo(_ context.Context
 	return fc, nil
 }
 
-func (ec *executionContext) _FollowPayload_success(ctx context.Context, field graphql.CollectedField, obj *model.FollowPayload) (ret graphql.Marshaler) {
-	fc, err := ec.fieldContext_FollowPayload_success(ctx, field)
-	if err != nil {
-		return graphql.Null
-	}
-	ctx = graphql.WithFieldContext(ctx, fc)
-	defer func() {
-		if r := recover(); r != nil {
-			ec.Error(ctx, ec.Recover(ctx, r))
-			ret = graphql.Null
-		}
-	}()
-	resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
-		ctx = rctx // use context from middleware stack in children
-		return obj.Success, nil
-	})
-	if err != nil {
-		ec.Error(ctx, err)
-		return graphql.Null
-	}
-	if resTmp == nil {
-		if !graphql.HasFieldError(ctx, fc) {
-			ec.Errorf(ctx, "must not be null")
-		}
-		return graphql.Null
-	}
-	res := resTmp.(bool)
-	fc.Result = res
-	return ec.marshalNBoolean2bool(ctx, field.Selections, res)
-}
-
-func (ec *executionContext) fieldContext_FollowPayload_success(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
-	fc = &graphql.FieldContext{
-		Object:     "FollowPayload",
-		Field:      field,
-		IsMethod:   false,
-		IsResolver: false,
-		Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
-			return nil, errors.New("field of type Boolean does not have child fields")
-		},
-	}
-	return fc, nil
-}
-
-func (ec *executionContext) _FollowPayload_message(ctx context.Context, field graphql.CollectedField, obj *model.FollowPayload) (ret graphql.Marshaler) {
-	fc, err := ec.fieldContext_FollowPayload_message(ctx, field)
-	if err != nil {
-		return graphql.Null
-	}
-	ctx = graphql.WithFieldContext(ctx, fc)
-	defer func() {
-		if r := recover(); r != nil {
-			ec.Error(ctx, ec.Recover(ctx, r))
-			ret = graphql.Null
-		}
-	}()
-	resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
-		ctx = rctx // use context from middleware stack in children
-		return obj.Message, nil
-	})
-	if err != nil {
-		ec.Error(ctx, err)
-		return graphql.Null
-	}
-	if resTmp == nil {
-		if !graphql.HasFieldError(ctx, fc) {
-			ec.Errorf(ctx, "must not be null")
-		}
-		return graphql.Null
-	}
-	res := resTmp.(string)
-	fc.Result = res
-	return ec.marshalNString2string(ctx, field.Selections, res)
-}
-
-func (ec *executionContext) fieldContext_FollowPayload_message(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
-	fc = &graphql.FieldContext{
-		Object:     "FollowPayload",
-		Field:      field,
-		IsMethod:   false,
-		IsResolver: false,
-		Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
-			return nil, errors.New("field of type String does not have child fields")
-		},
-	}
-	return fc, nil
-}
-
 func (ec *executionContext) _HTMLMeta_title(ctx context.Context, field graphql.CollectedField, obj *models.HTMLMeta) (ret graphql.Marshaler) {
 	fc, err := ec.fieldContext_HTMLMeta_title(ctx, field)
 	if err != nil {
@@ -10557,16 +10413,16 @@ func (ec *executionContext) _Mutation_addMember(ctx context.Context, field graph
 		directive1 := func(ctx context.Context) (any, error) {
 			scope, err := ec.unmarshalNAccessScope2linksᚋapiᚋgraphᚋmodelᚐAccessScope(ctx, "ORGS")
 			if err != nil {
-				var zeroVal *model.AddMemberPayload
+				var zeroVal *model.OperationPayload
 				return zeroVal, err
 			}
 			kind, err := ec.unmarshalNAccessKind2linksᚋapiᚋgraphᚋmodelᚐAccessKind(ctx, "RW")
 			if err != nil {
-				var zeroVal *model.AddMemberPayload
+				var zeroVal *model.OperationPayload
 				return zeroVal, err
 			}
 			if ec.directives.Access == nil {
-				var zeroVal *model.AddMemberPayload
+				var zeroVal *model.OperationPayload
 				return zeroVal, errors.New("directive access is not implemented")
 			}
 			return ec.directives.Access(ctx, nil, directive0, scope, kind)
@@ -10579,10 +10435,10 @@ func (ec *executionContext) _Mutation_addMember(ctx context.Context, field graph
 		if tmp == nil {
 			return nil, nil
 		}
-		if data, ok := tmp.(*model.AddMemberPayload); ok {
+		if data, ok := tmp.(*model.OperationPayload); ok {
 			return data, nil
 		}
-		return nil, fmt.Errorf(`unexpected type %T from directive, should be *links/api/graph/model.AddMemberPayload`, tmp)
+		return nil, fmt.Errorf(`unexpected type %T from directive, should be *links/api/graph/model.OperationPayload`, tmp)
 	})
 	if err != nil {
 		ec.Error(ctx, err)
@@ -10594,9 +10450,9 @@ func (ec *executionContext) _Mutation_addMember(ctx context.Context, field graph
 		}
 		return graphql.Null
 	}
-	res := resTmp.(*model.AddMemberPayload)
+	res := resTmp.(*model.OperationPayload)
 	fc.Result = res
-	return ec.marshalNAddMemberPayload2ᚖlinksᚋapiᚋgraphᚋmodelᚐAddMemberPayload(ctx, field.Selections, res)
+	return ec.marshalNOperationPayload2ᚖlinksᚋapiᚋgraphᚋmodelᚐOperationPayload(ctx, field.Selections, res)
 }
 
 func (ec *executionContext) fieldContext_Mutation_addMember(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
@@ -10608,11 +10464,11 @@ func (ec *executionContext) fieldContext_Mutation_addMember(ctx context.Context,
 		Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
 			switch field.Name {
 			case "success":
-				return ec.fieldContext_AddMemberPayload_success(ctx, field)
+				return ec.fieldContext_OperationPayload_success(ctx, field)
 			case "message":
-				return ec.fieldContext_AddMemberPayload_message(ctx, field)
+				return ec.fieldContext_OperationPayload_message(ctx, field)
 			}
-			return nil, fmt.Errorf("no field named %q was found under type AddMemberPayload", field.Name)
+			return nil, fmt.Errorf("no field named %q was found under type OperationPayload", field.Name)
 		},
 	}
 	defer func() {
@@ -10650,16 +10506,16 @@ func (ec *executionContext) _Mutation_deleteMember(ctx context.Context, field gr
 		directive1 := func(ctx context.Context) (any, error) {
 			scope, err := ec.unmarshalNAccessScope2linksᚋapiᚋgraphᚋmodelᚐAccessScope(ctx, "ORGS")
 			if err != nil {
-				var zeroVal *model.AddMemberPayload
+				var zeroVal *model.OperationPayload
 				return zeroVal, err
 			}
 			kind, err := ec.unmarshalNAccessKind2linksᚋapiᚋgraphᚋmodelᚐAccessKind(ctx, "RW")
 			if err != nil {
-				var zeroVal *model.AddMemberPayload
+				var zeroVal *model.OperationPayload
 				return zeroVal, err
 			}
 			if ec.directives.Access == nil {
-				var zeroVal *model.AddMemberPayload
+				var zeroVal *model.OperationPayload
 				return zeroVal, errors.New("directive access is not implemented")
 			}
 			return ec.directives.Access(ctx, nil, directive0, scope, kind)
@@ -10672,10 +10528,10 @@ func (ec *executionContext) _Mutation_deleteMember(ctx context.Context, field gr
 		if tmp == nil {
 			return nil, nil
 		}
-		if data, ok := tmp.(*model.AddMemberPayload); ok {
+		if data, ok := tmp.(*model.OperationPayload); ok {
 			return data, nil
 		}
-		return nil, fmt.Errorf(`unexpected type %T from directive, should be *links/api/graph/model.AddMemberPayload`, tmp)
+		return nil, fmt.Errorf(`unexpected type %T from directive, should be *links/api/graph/model.OperationPayload`, tmp)
 	})
 	if err != nil {
 		ec.Error(ctx, err)
@@ -10687,9 +10543,9 @@ func (ec *executionContext) _Mutation_deleteMember(ctx context.Context, field gr
 		}
 		return graphql.Null
 	}
-	res := resTmp.(*model.AddMemberPayload)
+	res := resTmp.(*model.OperationPayload)
 	fc.Result = res
-	return ec.marshalNAddMemberPayload2ᚖlinksᚋapiᚋgraphᚋmodelᚐAddMemberPayload(ctx, field.Selections, res)
+	return ec.marshalNOperationPayload2ᚖlinksᚋapiᚋgraphᚋmodelᚐOperationPayload(ctx, field.Selections, res)
 }
 
 func (ec *executionContext) fieldContext_Mutation_deleteMember(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
@@ -10701,11 +10557,11 @@ func (ec *executionContext) fieldContext_Mutation_deleteMember(ctx context.Conte
 		Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
 			switch field.Name {
 			case "success":
-				return ec.fieldContext_AddMemberPayload_success(ctx, field)
+				return ec.fieldContext_OperationPayload_success(ctx, field)
 			case "message":
-				return ec.fieldContext_AddMemberPayload_message(ctx, field)
+				return ec.fieldContext_OperationPayload_message(ctx, field)
 			}
-			return nil, fmt.Errorf("no field named %q was found under type AddMemberPayload", field.Name)
+			return nil, fmt.Errorf("no field named %q was found under type OperationPayload", field.Name)
 		},
 	}
 	defer func() {
@@ -10743,16 +10599,16 @@ func (ec *executionContext) _Mutation_confirmMember(ctx context.Context, field g
 		directive1 := func(ctx context.Context) (any, error) {
 			scope, err := ec.unmarshalNAccessScope2linksᚋapiᚋgraphᚋmodelᚐAccessScope(ctx, "PROFILE")
 			if err != nil {
-				var zeroVal *model.AddMemberPayload
+				var zeroVal *model.OperationPayload
 				return zeroVal, err
 			}
 			kind, err := ec.unmarshalNAccessKind2linksᚋapiᚋgraphᚋmodelᚐAccessKind(ctx, "RW")
 			if err != nil {
-				var zeroVal *model.AddMemberPayload
+				var zeroVal *model.OperationPayload
 				return zeroVal, err
 			}
 			if ec.directives.Access == nil {
-				var zeroVal *model.AddMemberPayload
+				var zeroVal *model.OperationPayload
 				return zeroVal, errors.New("directive access is not implemented")
 			}
 			return ec.directives.Access(ctx, nil, directive0, scope, kind)
@@ -10765,10 +10621,10 @@ func (ec *executionContext) _Mutation_confirmMember(ctx context.Context, field g
 		if tmp == nil {
 			return nil, nil
 		}
-		if data, ok := tmp.(*model.AddMemberPayload); ok {
+		if data, ok := tmp.(*model.OperationPayload); ok {
 			return data, nil
 		}
-		return nil, fmt.Errorf(`unexpected type %T from directive, should be *links/api/graph/model.AddMemberPayload`, tmp)
+		return nil, fmt.Errorf(`unexpected type %T from directive, should be *links/api/graph/model.OperationPayload`, tmp)
 	})
 	if err != nil {
 		ec.Error(ctx, err)
@@ -10780,9 +10636,9 @@ func (ec *executionContext) _Mutation_confirmMember(ctx context.Context, field g
 		}
 		return graphql.Null
 	}
-	res := resTmp.(*model.AddMemberPayload)
+	res := resTmp.(*model.OperationPayload)
 	fc.Result = res
-	return ec.marshalNAddMemberPayload2ᚖlinksᚋapiᚋgraphᚋmodelᚐAddMemberPayload(ctx, field.Selections, res)
+	return ec.marshalNOperationPayload2ᚖlinksᚋapiᚋgraphᚋmodelᚐOperationPayload(ctx, field.Selections, res)
 }
 
 func (ec *executionContext) fieldContext_Mutation_confirmMember(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
@@ -10794,11 +10650,11 @@ func (ec *executionContext) fieldContext_Mutation_confirmMember(ctx context.Cont
 		Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
 			switch field.Name {
 			case "success":
-				return ec.fieldContext_AddMemberPayload_success(ctx, field)
+				return ec.fieldContext_OperationPayload_success(ctx, field)
 			case "message":
-				return ec.fieldContext_AddMemberPayload_message(ctx, field)
+				return ec.fieldContext_OperationPayload_message(ctx, field)
 			}
-			return nil, fmt.Errorf("no field named %q was found under type AddMemberPayload", field.Name)
+			return nil, fmt.Errorf("no field named %q was found under type OperationPayload", field.Name)
 		},
 	}
 	defer func() {
@@ -12502,16 +12358,16 @@ func (ec *executionContext) _Mutation_follow(ctx context.Context, field graphql.
 		directive1 := func(ctx context.Context) (any, error) {
 			scope, err := ec.unmarshalNAccessScope2linksᚋapiᚋgraphᚋmodelᚐAccessScope(ctx, "PROFILE")
 			if err != nil {
-				var zeroVal *model.FollowPayload
+				var zeroVal *model.OperationPayload
 				return zeroVal, err
 			}
 			kind, err := ec.unmarshalNAccessKind2linksᚋapiᚋgraphᚋmodelᚐAccessKind(ctx, "RW")
 			if err != nil {
-				var zeroVal *model.FollowPayload
+				var zeroVal *model.OperationPayload
 				return zeroVal, err
 			}
 			if ec.directives.Access == nil {
-				var zeroVal *model.FollowPayload
+				var zeroVal *model.OperationPayload
 				return zeroVal, errors.New("directive access is not implemented")
 			}
 			return ec.directives.Access(ctx, nil, directive0, scope, kind)
@@ -12524,10 +12380,10 @@ func (ec *executionContext) _Mutation_follow(ctx context.Context, field graphql.
 		if tmp == nil {
 			return nil, nil
 		}
-		if data, ok := tmp.(*model.FollowPayload); ok {
+		if data, ok := tmp.(*model.OperationPayload); ok {
 			return data, nil
 		}
-		return nil, fmt.Errorf(`unexpected type %T from directive, should be *links/api/graph/model.FollowPayload`, tmp)
+		return nil, fmt.Errorf(`unexpected type %T from directive, should be *links/api/graph/model.OperationPayload`, tmp)
 	})
 	if err != nil {
 		ec.Error(ctx, err)
@@ -12539,9 +12395,9 @@ func (ec *executionContext) _Mutation_follow(ctx context.Context, field graphql.
 		}
 		return graphql.Null
 	}
-	res := resTmp.(*model.FollowPayload)
+	res := resTmp.(*model.OperationPayload)
 	fc.Result = res
-	return ec.marshalNFollowPayload2ᚖlinksᚋapiᚋgraphᚋmodelᚐFollowPayload(ctx, field.Selections, res)
+	return ec.marshalNOperationPayload2ᚖlinksᚋapiᚋgraphᚋmodelᚐOperationPayload(ctx, field.Selections, res)
 }
 
 func (ec *executionContext) fieldContext_Mutation_follow(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
@@ -12553,11 +12409,11 @@ func (ec *executionContext) fieldContext_Mutation_follow(ctx context.Context, fi
 		Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
 			switch field.Name {
 			case "success":
-				return ec.fieldContext_FollowPayload_success(ctx, field)
+				return ec.fieldContext_OperationPayload_success(ctx, field)
 			case "message":
-				return ec.fieldContext_FollowPayload_message(ctx, field)
+				return ec.fieldContext_OperationPayload_message(ctx, field)
 			}
-			return nil, fmt.Errorf("no field named %q was found under type FollowPayload", field.Name)
+			return nil, fmt.Errorf("no field named %q was found under type OperationPayload", field.Name)
 		},
 	}
 	defer func() {
@@ -12595,16 +12451,16 @@ func (ec *executionContext) _Mutation_unfollow(ctx context.Context, field graphq
 		directive1 := func(ctx context.Context) (any, error) {
 			scope, err := ec.unmarshalNAccessScope2linksᚋapiᚋgraphᚋmodelᚐAccessScope(ctx, "PROFILE")
 			if err != nil {
-				var zeroVal *model.FollowPayload
+				var zeroVal *model.OperationPayload
 				return zeroVal, err
 			}
 			kind, err := ec.unmarshalNAccessKind2linksᚋapiᚋgraphᚋmodelᚐAccessKind(ctx, "RW")
 			if err != nil {
-				var zeroVal *model.FollowPayload
+				var zeroVal *model.OperationPayload
 				return zeroVal, err
 			}
 			if ec.directives.Access == nil {
-				var zeroVal *model.FollowPayload
+				var zeroVal *model.OperationPayload
 				return zeroVal, errors.New("directive access is not implemented")
 			}
 			return ec.directives.Access(ctx, nil, directive0, scope, kind)
@@ -12617,10 +12473,10 @@ func (ec *executionContext) _Mutation_unfollow(ctx context.Context, field graphq
 		if tmp == nil {
 			return nil, nil
 		}
-		if data, ok := tmp.(*model.FollowPayload); ok {
+		if data, ok := tmp.(*model.OperationPayload); ok {
 			return data, nil
 		}
-		return nil, fmt.Errorf(`unexpected type %T from directive, should be *links/api/graph/model.FollowPayload`, tmp)
+		return nil, fmt.Errorf(`unexpected type %T from directive, should be *links/api/graph/model.OperationPayload`, tmp)
 	})
 	if err != nil {
 		ec.Error(ctx, err)
@@ -12632,9 +12488,9 @@ func (ec *executionContext) _Mutation_unfollow(ctx context.Context, field graphq
 		}
 		return graphql.Null
 	}
-	res := resTmp.(*model.FollowPayload)
+	res := resTmp.(*model.OperationPayload)
 	fc.Result = res
-	return ec.marshalNFollowPayload2ᚖlinksᚋapiᚋgraphᚋmodelᚐFollowPayload(ctx, field.Selections, res)
+	return ec.marshalNOperationPayload2ᚖlinksᚋapiᚋgraphᚋmodelᚐOperationPayload(ctx, field.Selections, res)
 }
 
 func (ec *executionContext) fieldContext_Mutation_unfollow(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
@@ -12646,11 +12502,11 @@ func (ec *executionContext) fieldContext_Mutation_unfollow(ctx context.Context,
 		Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
 			switch field.Name {
 			case "success":
-				return ec.fieldContext_FollowPayload_success(ctx, field)
+				return ec.fieldContext_OperationPayload_success(ctx, field)
 			case "message":
-				return ec.fieldContext_FollowPayload_message(ctx, field)
+				return ec.fieldContext_OperationPayload_message(ctx, field)
 			}
-			return nil, fmt.Errorf("no field named %q was found under type FollowPayload", field.Name)
+			return nil, fmt.Errorf("no field named %q was found under type OperationPayload", field.Name)
 		},
 	}
 	defer func() {
@@ -12667,6 +12523,194 @@ func (ec *executionContext) fieldContext_Mutation_unfollow(ctx context.Context,
 	return fc, nil
 }
 
+func (ec *executionContext) _Mutation_deleteTag(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
+	fc, err := ec.fieldContext_Mutation_deleteTag(ctx, field)
+	if err != nil {
+		return graphql.Null
+	}
+	ctx = graphql.WithFieldContext(ctx, fc)
+	defer func() {
+		if r := recover(); r != nil {
+			ec.Error(ctx, ec.Recover(ctx, r))
+			ret = graphql.Null
+		}
+	}()
+	resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
+		directive0 := func(rctx context.Context) (any, error) {
+			ctx = rctx // use context from middleware stack in children
+			return ec.resolvers.Mutation().DeleteTag(rctx, fc.Args["input"].(model.TagInput))
+		}
+
+		directive1 := func(ctx context.Context) (any, error) {
+			scope, err := ec.unmarshalNAccessScope2linksᚋapiᚋgraphᚋmodelᚐAccessScope(ctx, "ORGS")
+			if err != nil {
+				var zeroVal *model.DeletePayload
+				return zeroVal, err
+			}
+			kind, err := ec.unmarshalNAccessKind2linksᚋapiᚋgraphᚋmodelᚐAccessKind(ctx, "RW")
+			if err != nil {
+				var zeroVal *model.DeletePayload
+				return zeroVal, err
+			}
+			if ec.directives.Access == nil {
+				var zeroVal *model.DeletePayload
+				return zeroVal, errors.New("directive access is not implemented")
+			}
+			return ec.directives.Access(ctx, nil, directive0, scope, kind)
+		}
+
+		tmp, err := directive1(rctx)
+		if err != nil {
+			return nil, graphql.ErrorOnPath(ctx, err)
+		}
+		if tmp == nil {
+			return nil, nil
+		}
+		if data, ok := tmp.(*model.DeletePayload); ok {
+			return data, nil
+		}
+		return nil, fmt.Errorf(`unexpected type %T from directive, should be *links/api/graph/model.DeletePayload`, tmp)
+	})
+	if err != nil {
+		ec.Error(ctx, err)
+		return graphql.Null
+	}
+	if resTmp == nil {
+		if !graphql.HasFieldError(ctx, fc) {
+			ec.Errorf(ctx, "must not be null")
+		}
+		return graphql.Null
+	}
+	res := resTmp.(*model.DeletePayload)
+	fc.Result = res
+	return ec.marshalNDeletePayload2ᚖlinksᚋapiᚋgraphᚋmodelᚐDeletePayload(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) fieldContext_Mutation_deleteTag(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
+	fc = &graphql.FieldContext{
+		Object:     "Mutation",
+		Field:      field,
+		IsMethod:   true,
+		IsResolver: true,
+		Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
+			switch field.Name {
+			case "success":
+				return ec.fieldContext_DeletePayload_success(ctx, field)
+			case "objectId":
+				return ec.fieldContext_DeletePayload_objectId(ctx, field)
+			case "message":
+				return ec.fieldContext_DeletePayload_message(ctx, field)
+			}
+			return nil, fmt.Errorf("no field named %q was found under type DeletePayload", field.Name)
+		},
+	}
+	defer func() {
+		if r := recover(); r != nil {
+			err = ec.Recover(ctx, r)
+			ec.Error(ctx, err)
+		}
+	}()
+	ctx = graphql.WithFieldContext(ctx, fc)
+	if fc.Args, err = ec.field_Mutation_deleteTag_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
+		ec.Error(ctx, err)
+		return fc, err
+	}
+	return fc, nil
+}
+
+func (ec *executionContext) _Mutation_renameTag(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
+	fc, err := ec.fieldContext_Mutation_renameTag(ctx, field)
+	if err != nil {
+		return graphql.Null
+	}
+	ctx = graphql.WithFieldContext(ctx, fc)
+	defer func() {
+		if r := recover(); r != nil {
+			ec.Error(ctx, ec.Recover(ctx, r))
+			ret = graphql.Null
+		}
+	}()
+	resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
+		directive0 := func(rctx context.Context) (any, error) {
+			ctx = rctx // use context from middleware stack in children
+			return ec.resolvers.Mutation().RenameTag(rctx, fc.Args["input"].(model.TagInput))
+		}
+
+		directive1 := func(ctx context.Context) (any, error) {
+			scope, err := ec.unmarshalNAccessScope2linksᚋapiᚋgraphᚋmodelᚐAccessScope(ctx, "ORGS")
+			if err != nil {
+				var zeroVal *model.OperationPayload
+				return zeroVal, err
+			}
+			kind, err := ec.unmarshalNAccessKind2linksᚋapiᚋgraphᚋmodelᚐAccessKind(ctx, "RW")
+			if err != nil {
+				var zeroVal *model.OperationPayload
+				return zeroVal, err
+			}
+			if ec.directives.Access == nil {
+				var zeroVal *model.OperationPayload
+				return zeroVal, errors.New("directive access is not implemented")
+			}
+			return ec.directives.Access(ctx, nil, directive0, scope, kind)
+		}
+
+		tmp, err := directive1(rctx)
+		if err != nil {
+			return nil, graphql.ErrorOnPath(ctx, err)
+		}
+		if tmp == nil {
+			return nil, nil
+		}
+		if data, ok := tmp.(*model.OperationPayload); ok {
+			return data, nil
+		}
+		return nil, fmt.Errorf(`unexpected type %T from directive, should be *links/api/graph/model.OperationPayload`, tmp)
+	})
+	if err != nil {
+		ec.Error(ctx, err)
+		return graphql.Null
+	}
+	if resTmp == nil {
+		if !graphql.HasFieldError(ctx, fc) {
+			ec.Errorf(ctx, "must not be null")
+		}
+		return graphql.Null
+	}
+	res := resTmp.(*model.OperationPayload)
+	fc.Result = res
+	return ec.marshalNOperationPayload2ᚖlinksᚋapiᚋgraphᚋmodelᚐOperationPayload(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) fieldContext_Mutation_renameTag(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
+	fc = &graphql.FieldContext{
+		Object:     "Mutation",
+		Field:      field,
+		IsMethod:   true,
+		IsResolver: true,
+		Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
+			switch field.Name {
+			case "success":
+				return ec.fieldContext_OperationPayload_success(ctx, field)
+			case "message":
+				return ec.fieldContext_OperationPayload_message(ctx, field)
+			}
+			return nil, fmt.Errorf("no field named %q was found under type OperationPayload", field.Name)
+		},
+	}
+	defer func() {
+		if r := recover(); r != nil {
+			err = ec.Recover(ctx, r)
+			ec.Error(ctx, err)
+		}
+	}()
+	ctx = graphql.WithFieldContext(ctx, fc)
+	if fc.Args, err = ec.field_Mutation_renameTag_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
+		ec.Error(ctx, err)
+		return fc, err
+	}
+	return fc, nil
+}
+
 func (ec *executionContext) _Mutation_updateAdminOrg(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) {
 	fc, err := ec.fieldContext_Mutation_updateAdminOrg(ctx, field)
 	if err != nil {
@@ -13324,6 +13368,94 @@ func (ec *executionContext) fieldContext_NullString_valid(_ context.Context, fie
 	return fc, nil
 }
 
+func (ec *executionContext) _OperationPayload_success(ctx context.Context, field graphql.CollectedField, obj *model.OperationPayload) (ret graphql.Marshaler) {
+	fc, err := ec.fieldContext_OperationPayload_success(ctx, field)
+	if err != nil {
+		return graphql.Null
+	}
+	ctx = graphql.WithFieldContext(ctx, fc)
+	defer func() {
+		if r := recover(); r != nil {
+			ec.Error(ctx, ec.Recover(ctx, r))
+			ret = graphql.Null
+		}
+	}()
+	resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
+		ctx = rctx // use context from middleware stack in children
+		return obj.Success, nil
+	})
+	if err != nil {
+		ec.Error(ctx, err)
+		return graphql.Null
+	}
+	if resTmp == nil {
+		if !graphql.HasFieldError(ctx, fc) {
+			ec.Errorf(ctx, "must not be null")
+		}
+		return graphql.Null
+	}
+	res := resTmp.(bool)
+	fc.Result = res
+	return ec.marshalNBoolean2bool(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) fieldContext_OperationPayload_success(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
+	fc = &graphql.FieldContext{
+		Object:     "OperationPayload",
+		Field:      field,
+		IsMethod:   false,
+		IsResolver: false,
+		Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
+			return nil, errors.New("field of type Boolean does not have child fields")
+		},
+	}
+	return fc, nil
+}
+
+func (ec *executionContext) _OperationPayload_message(ctx context.Context, field graphql.CollectedField, obj *model.OperationPayload) (ret graphql.Marshaler) {
+	fc, err := ec.fieldContext_OperationPayload_message(ctx, field)
+	if err != nil {
+		return graphql.Null
+	}
+	ctx = graphql.WithFieldContext(ctx, fc)
+	defer func() {
+		if r := recover(); r != nil {
+			ec.Error(ctx, ec.Recover(ctx, r))
+			ret = graphql.Null
+		}
+	}()
+	resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
+		ctx = rctx // use context from middleware stack in children
+		return obj.Message, nil
+	})
+	if err != nil {
+		ec.Error(ctx, err)
+		return graphql.Null
+	}
+	if resTmp == nil {
+		if !graphql.HasFieldError(ctx, fc) {
+			ec.Errorf(ctx, "must not be null")
+		}
+		return graphql.Null
+	}
+	res := resTmp.(string)
+	fc.Result = res
+	return ec.marshalNString2string(ctx, field.Selections, res)
+}
+
+func (ec *executionContext) fieldContext_OperationPayload_message(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
+	fc = &graphql.FieldContext{
+		Object:     "OperationPayload",
+		Field:      field,
+		IsMethod:   false,
+		IsResolver: false,
+		Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
+			return nil, errors.New("field of type String does not have child fields")
+		},
+	}
+	return fc, nil
+}
+
 func (ec *executionContext) _OrgLink_id(ctx context.Context, field graphql.CollectedField, obj *models.OrgLink) (ret graphql.Marshaler) {
 	fc, err := ec.fieldContext_OrgLink_id(ctx, field)
 	if err != nil {
@@ -25661,6 +25793,54 @@ func (ec *executionContext) unmarshalInputRegisterInput(ctx context.Context, obj
 	return it, nil
 }
 
+func (ec *executionContext) unmarshalInputTagInput(ctx context.Context, obj any) (model.TagInput, error) {
+	var it model.TagInput
+	asMap := map[string]any{}
+	for k, v := range obj.(map[string]any) {
+		asMap[k] = v
+	}
+
+	fieldsInOrder := [...]string{"orgSlug", "service", "tag", "newTag"}
+	for _, k := range fieldsInOrder {
+		v, ok := asMap[k]
+		if !ok {
+			continue
+		}
+		switch k {
+		case "orgSlug":
+			ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("orgSlug"))
+			data, err := ec.unmarshalNString2string(ctx, v)
+			if err != nil {
+				return it, err
+			}
+			it.OrgSlug = data
+		case "service":
+			ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("service"))
+			data, err := ec.unmarshalNDomainService2linksᚋapiᚋgraphᚋmodelᚐDomainService(ctx, v)
+			if err != nil {
+				return it, err
+			}
+			it.Service = data
+		case "tag":
+			ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("tag"))
+			data, err := ec.unmarshalNString2string(ctx, v)
+			if err != nil {
+				return it, err
+			}
+			it.Tag = data
+		case "newTag":
+			ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("newTag"))
+			data, err := ec.unmarshalOString2ᚖstring(ctx, v)
+			if err != nil {
+				return it, err
+			}
+			it.NewTag = data
+		}
+	}
+
+	return it, nil
+}
+
 func (ec *executionContext) unmarshalInputUpdateAdminDomainInput(ctx context.Context, obj any) (model.UpdateAdminDomainInput, error) {
 	var it model.UpdateAdminDomainInput
 	asMap := map[string]any{}
@@ -26194,50 +26374,6 @@ func (ec *executionContext) unmarshalInputUpdateUserInput(ctx context.Context, o
 
 // region    **************************** object.gotpl ****************************
 
-var addMemberPayloadImplementors = []string{"AddMemberPayload"}
-
-func (ec *executionContext) _AddMemberPayload(ctx context.Context, sel ast.SelectionSet, obj *model.AddMemberPayload) graphql.Marshaler {
-	fields := graphql.CollectFields(ec.OperationContext, sel, addMemberPayloadImplementors)
-
-	out := graphql.NewFieldSet(fields)
-	deferred := make(map[string]*graphql.FieldSet)
-	for i, field := range fields {
-		switch field.Name {
-		case "__typename":
-			out.Values[i] = graphql.MarshalString("AddMemberPayload")
-		case "success":
-			out.Values[i] = ec._AddMemberPayload_success(ctx, field, obj)
-			if out.Values[i] == graphql.Null {
-				out.Invalids++
-			}
-		case "message":
-			out.Values[i] = ec._AddMemberPayload_message(ctx, field, obj)
-			if out.Values[i] == graphql.Null {
-				out.Invalids++
-			}
-		default:
-			panic("unknown field " + strconv.Quote(field.Name))
-		}
-	}
-	out.Dispatch(ctx)
-	if out.Invalids > 0 {
-		return graphql.Null
-	}
-
-	atomic.AddInt32(&ec.deferred, int32(len(deferred)))
-
-	for label, dfs := range deferred {
-		ec.processDeferredGroup(graphql.DeferredGroup{
-			Label:    label,
-			Path:     graphql.GetPath(ctx),
-			FieldSet: dfs,
-			Context:  ctx,
-		})
-	}
-
-	return out
-}
-
 var adminBillingStatsImplementors = []string{"AdminBillingStats"}
 
 func (ec *executionContext) _AdminBillingStats(ctx context.Context, sel ast.SelectionSet, obj *model.AdminBillingStats) graphql.Marshaler {
@@ -27169,50 +27305,6 @@ func (ec *executionContext) _DomainCursor(ctx context.Context, sel ast.Selection
 	return out
 }
 
-var followPayloadImplementors = []string{"FollowPayload"}
-
-func (ec *executionContext) _FollowPayload(ctx context.Context, sel ast.SelectionSet, obj *model.FollowPayload) graphql.Marshaler {
-	fields := graphql.CollectFields(ec.OperationContext, sel, followPayloadImplementors)
-
-	out := graphql.NewFieldSet(fields)
-	deferred := make(map[string]*graphql.FieldSet)
-	for i, field := range fields {
-		switch field.Name {
-		case "__typename":
-			out.Values[i] = graphql.MarshalString("FollowPayload")
-		case "success":
-			out.Values[i] = ec._FollowPayload_success(ctx, field, obj)
-			if out.Values[i] == graphql.Null {
-				out.Invalids++
-			}
-		case "message":
-			out.Values[i] = ec._FollowPayload_message(ctx, field, obj)
-			if out.Values[i] == graphql.Null {
-				out.Invalids++
-			}
-		default:
-			panic("unknown field " + strconv.Quote(field.Name))
-		}
-	}
-	out.Dispatch(ctx)
-	if out.Invalids > 0 {
-		return graphql.Null
-	}
-
-	atomic.AddInt32(&ec.deferred, int32(len(deferred)))
-
-	for label, dfs := range deferred {
-		ec.processDeferredGroup(graphql.DeferredGroup{
-			Label:    label,
-			Path:     graphql.GetPath(ctx),
-			FieldSet: dfs,
-			Context:  ctx,
-		})
-	}
-
-	return out
-}
-
 var hTMLMetaImplementors = []string{"HTMLMeta"}
 
 func (ec *executionContext) _HTMLMeta(ctx context.Context, sel ast.SelectionSet, obj *models.HTMLMeta) graphql.Marshaler {
@@ -27910,6 +28002,20 @@ func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet)
 			if out.Values[i] == graphql.Null {
 				out.Invalids++
 			}
+		case "deleteTag":
+			out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) {
+				return ec._Mutation_deleteTag(ctx, field)
+			})
+			if out.Values[i] == graphql.Null {
+				out.Invalids++
+			}
+		case "renameTag":
+			out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) {
+				return ec._Mutation_renameTag(ctx, field)
+			})
+			if out.Values[i] == graphql.Null {
+				out.Invalids++
+			}
 		case "updateAdminOrg":
 			out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) {
 				return ec._Mutation_updateAdminOrg(ctx, field)
@@ -28056,6 +28162,50 @@ func (ec *executionContext) _NullString(ctx context.Context, sel ast.SelectionSe
 	return out
 }
 
+var operationPayloadImplementors = []string{"OperationPayload"}
+
+func (ec *executionContext) _OperationPayload(ctx context.Context, sel ast.SelectionSet, obj *model.OperationPayload) graphql.Marshaler {
+	fields := graphql.CollectFields(ec.OperationContext, sel, operationPayloadImplementors)
+
+	out := graphql.NewFieldSet(fields)
+	deferred := make(map[string]*graphql.FieldSet)
+	for i, field := range fields {
+		switch field.Name {
+		case "__typename":
+			out.Values[i] = graphql.MarshalString("OperationPayload")
+		case "success":
+			out.Values[i] = ec._OperationPayload_success(ctx, field, obj)
+			if out.Values[i] == graphql.Null {
+				out.Invalids++
+			}
+		case "message":
+			out.Values[i] = ec._OperationPayload_message(ctx, field, obj)
+			if out.Values[i] == graphql.Null {
+				out.Invalids++
+			}
+		default:
+			panic("unknown field " + strconv.Quote(field.Name))
+		}
+	}
+	out.Dispatch(ctx)
+	if out.Invalids > 0 {
+		return graphql.Null
+	}
+
+	atomic.AddInt32(&ec.deferred, int32(len(deferred)))
+
+	for label, dfs := range deferred {
+		ec.processDeferredGroup(graphql.DeferredGroup{
+			Label:    label,
+			Path:     graphql.GetPath(ctx),
+			FieldSet: dfs,
+			Context:  ctx,
+		})
+	}
+
+	return out
+}
+
 var orgLinkImplementors = []string{"OrgLink"}
 
 func (ec *executionContext) _OrgLink(ctx context.Context, sel ast.SelectionSet, obj *models.OrgLink) graphql.Marshaler {
@@ -30469,20 +30619,6 @@ func (ec *executionContext) marshalNAccessScope2linksᚋapiᚋgraphᚋmodelᚐAc
 	return v
 }
 
-func (ec *executionContext) marshalNAddMemberPayload2linksᚋapiᚋgraphᚋmodelᚐAddMemberPayload(ctx context.Context, sel ast.SelectionSet, v model.AddMemberPayload) graphql.Marshaler {
-	return ec._AddMemberPayload(ctx, sel, &v)
-}
-
-func (ec *executionContext) marshalNAddMemberPayload2ᚖlinksᚋapiᚋgraphᚋmodelᚐAddMemberPayload(ctx context.Context, sel ast.SelectionSet, v *model.AddMemberPayload) graphql.Marshaler {
-	if v == nil {
-		if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
-			ec.Errorf(ctx, "the requested element is null which the schema does not allow")
-		}
-		return graphql.Null
-	}
-	return ec._AddMemberPayload(ctx, sel, v)
-}
-
 func (ec *executionContext) unmarshalNAddQRCodeInput2linksᚋapiᚋgraphᚋmodelᚐAddQRCodeInput(ctx context.Context, v any) (model.AddQRCodeInput, error) {
 	res, err := ec.unmarshalInputAddQRCodeInput(ctx, v)
 	return res, graphql.ErrorOnPath(ctx, err)
@@ -30818,20 +30954,6 @@ func (ec *executionContext) marshalNDomainStatus2linksᚋapiᚋgraphᚋmodelᚐD
 	return v
 }
 
-func (ec *executionContext) marshalNFollowPayload2linksᚋapiᚋgraphᚋmodelᚐFollowPayload(ctx context.Context, sel ast.SelectionSet, v model.FollowPayload) graphql.Marshaler {
-	return ec._FollowPayload(ctx, sel, &v)
-}
-
-func (ec *executionContext) marshalNFollowPayload2ᚖlinksᚋapiᚋgraphᚋmodelᚐFollowPayload(ctx context.Context, sel ast.SelectionSet, v *model.FollowPayload) graphql.Marshaler {
-	if v == nil {
-		if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
-			ec.Errorf(ctx, "the requested element is null which the schema does not allow")
-		}
-		return graphql.Null
-	}
-	return ec._FollowPayload(ctx, sel, v)
-}
-
 func (ec *executionContext) unmarshalNGetTagsInput2linksᚋapiᚋgraphᚋmodelᚐGetTagsInput(ctx context.Context, v any) (model.GetTagsInput, error) {
 	res, err := ec.unmarshalInputGetTagsInput(ctx, v)
 	return res, graphql.ErrorOnPath(ctx, err)
@@ -31129,6 +31251,20 @@ func (ec *executionContext) marshalNNullString2ᚖlinksᚋapiᚋgraphᚋmodelᚐ
 	return ec._NullString(ctx, sel, v)
 }
 
+func (ec *executionContext) marshalNOperationPayload2linksᚋapiᚋgraphᚋmodelᚐOperationPayload(ctx context.Context, sel ast.SelectionSet, v model.OperationPayload) graphql.Marshaler {
+	return ec._OperationPayload(ctx, sel, &v)
+}
+
+func (ec *executionContext) marshalNOperationPayload2ᚖlinksᚋapiᚋgraphᚋmodelᚐOperationPayload(ctx context.Context, sel ast.SelectionSet, v *model.OperationPayload) graphql.Marshaler {
+	if v == nil {
+		if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) {
+			ec.Errorf(ctx, "the requested element is null which the schema does not allow")
+		}
+		return graphql.Null
+	}
+	return ec._OperationPayload(ctx, sel, v)
+}
+
 func (ec *executionContext) unmarshalNOrgBillingStatus2linksᚋapiᚋgraphᚋmodelᚐOrgBillingStatus(ctx context.Context, v any) (model.OrgBillingStatus, error) {
 	var res model.OrgBillingStatus
 	err := res.UnmarshalGQL(v)
@@ -31610,6 +31746,11 @@ func (ec *executionContext) marshalNTagCursor2ᚖlinksᚋapiᚋgraphᚋmodelᚐT
 	return ec._TagCursor(ctx, sel, v)
 }
 
+func (ec *executionContext) unmarshalNTagInput2linksᚋapiᚋgraphᚋmodelᚐTagInput(ctx context.Context, v any) (model.TagInput, error) {
+	res, err := ec.unmarshalInputTagInput(ctx, v)
+	return res, graphql.ErrorOnPath(ctx, err)
+}
+
 func (ec *executionContext) unmarshalNTime2timeᚐTime(ctx context.Context, v any) (time.Time, error) {
 	res, err := graphql.UnmarshalTime(v)
 	return res, graphql.ErrorOnPath(ctx, err)
diff --git a/api/graph/model/models_gen.go b/api/graph/model/models_gen.go
index 0fbf74d..ac45cf5 100644
--- a/api/graph/model/models_gen.go
+++ b/api/graph/model/models_gen.go
@@ -40,11 +40,6 @@ type AddListingLinkInput struct {
 	Description *string `json:"description,omitempty"`
 }
 
-type AddMemberPayload struct {
-	Success bool   `json:"success"`
-	Message string `json:"message"`
-}
-
 type AddQRCodeInput struct {
 	Title     string          `json:"title"`
 	OrgSlug   string          `json:"orgSlug"`
@@ -162,11 +157,6 @@ type DomainInput struct {
 	MigrateLinks *bool         `json:"migrateLinks,omitempty"`
 }
 
-type FollowPayload struct {
-	Success bool   `json:"success"`
-	Message string `json:"message"`
-}
-
 type GetAdminDomainInput struct {
 	Limit         *int           `json:"limit,omitempty"`
 	After         *Cursor        `json:"after,omitempty"`
@@ -339,6 +329,11 @@ type NullString struct {
 	Valid  bool   `json:"valid"`
 }
 
+type OperationPayload struct {
+	Success bool   `json:"success"`
+	Message string `json:"message"`
+}
+
 type OrgLinkCursor struct {
 	Result          []*models.OrgLink `json:"result"`
 	PageInfo        *PageInfo         `json:"pageInfo,omitempty"`
@@ -436,6 +431,13 @@ type TagCursor struct {
 	PageInfo *PageInfo     `json:"pageInfo,omitempty"`
 }
 
+type TagInput struct {
+	OrgSlug string        `json:"orgSlug"`
+	Service DomainService `json:"service"`
+	Tag     string        `json:"tag"`
+	NewTag  *string       `json:"newTag,omitempty"`
+}
+
 type UpdateAdminDomainInput struct {
 	ID           int           `json:"id"`
 	Name         string        `json:"name"`
diff --git a/api/graph/schema.graphqls b/api/graph/schema.graphqls
index 54aeffa..4799141 100644
--- a/api/graph/schema.graphqls
+++ b/api/graph/schema.graphqls
@@ -802,12 +802,7 @@ type DeletePayload {
     message: String
 }
 
-type AddMemberPayload {
-    success: Boolean!
-    message: String!
-}
-
-type FollowPayload {
+type OperationPayload {
     success: Boolean!
     message: String!
 }
@@ -827,6 +822,15 @@ input AdminUpdateOrgInput {
     visibility: PublicVisibility
 }
 
+input TagInput {
+  orgSlug: String!
+  service: DomainService!
+  tag: String!
+
+  "newTag is required for `renameTag` mutation"
+  newTag: String
+}
+
 type Query {
     "Returns API version information."
     version: Version!
@@ -928,9 +932,9 @@ type Mutation {
     addNote(input: NoteInput): OrgLink! @access(scope: LINKS, kind: RW)
     
     "Add organization members"
-    addMember(input: MemberInput): AddMemberPayload! @access(scope: ORGS, kind: RW)
-    deleteMember(orgSlug: String!, email: String!): AddMemberPayload! @access(scope: ORGS, kind: RW)
-    confirmMember(key: String!): AddMemberPayload! @access(scope: PROFILE, kind: RW)
+    addMember(input: MemberInput): OperationPayload! @access(scope: ORGS, kind: RW)
+    deleteMember(orgSlug: String!, email: String!): OperationPayload! @access(scope: ORGS, kind: RW)
+    confirmMember(key: String!): OperationPayload! @access(scope: PROFILE, kind: RW)
 
     "Register an account"
     register(input: RegisterInput): User! @internal
@@ -961,8 +965,12 @@ type Mutation {
     deleteQRCode(id: Int!): DeletePayload! @access(scope: QRCODES, kind: RW)
 
     "Un/Follow an organization as the calling user"
-    follow(orgSlug: String!): FollowPayload! @access(scope: PROFILE, kind: RW)
-    unfollow(orgSlug: String!): FollowPayload! @access(scope: PROFILE, kind: RW)
+    follow(orgSlug: String!): OperationPayload! @access(scope: PROFILE, kind: RW)
+    unfollow(orgSlug: String!): OperationPayload! @access(scope: PROFILE, kind: RW)
+
+    "delete or rename tags"
+    deleteTag(input: TagInput!): DeletePayload! @access(scope: ORGS, kind: RW)
+    renameTag(input: TagInput!): OperationPayload! @access(scope: ORGS, kind: RW)
 
     #
     # Admin only. Not open to public calls
diff --git a/api/graph/schema.resolvers.go b/api/graph/schema.resolvers.go
index 547d662..220803d 100644
--- a/api/graph/schema.resolvers.go
+++ b/api/graph/schema.resolvers.go
@@ -1053,7 +1053,7 @@ func (r *mutationResolver) AddNote(ctx context.Context, input *model.NoteInput)
 }
 
 // AddMember is the resolver for the addMember field.
-func (r *mutationResolver) AddMember(ctx context.Context, input *model.MemberInput) (*model.AddMemberPayload, error) {
+func (r *mutationResolver) AddMember(ctx context.Context, input *model.MemberInput) (*model.OperationPayload, error) {
 	tokenUser := oauth2.ForContext(ctx)
 	if tokenUser == nil {
 		return nil, valid.ErrAuthorization
@@ -1142,7 +1142,7 @@ func (r *mutationResolver) AddMember(ctx context.Context, input *model.MemberInp
 		return nil, err
 	}
 
-	addMemberPayload := &model.AddMemberPayload{}
+	addMemberPayload := &model.OperationPayload{}
 	tmpl := srv.Echo().Renderer.(*validate.Template).Templates()
 	var user *models.User
 	var isNewUser bool
@@ -1232,7 +1232,7 @@ func (r *mutationResolver) AddMember(ctx context.Context, input *model.MemberInp
 }
 
 // DeleteMember is the resolver for the deleteMember field.
-func (r *mutationResolver) DeleteMember(ctx context.Context, orgSlug string, email string) (*model.AddMemberPayload, error) {
+func (r *mutationResolver) DeleteMember(ctx context.Context, orgSlug string, email string) (*model.OperationPayload, error) {
 	tokenUser := oauth2.ForContext(ctx)
 	if tokenUser == nil {
 		return nil, valid.ErrAuthorization
@@ -1303,7 +1303,7 @@ func (r *mutationResolver) DeleteMember(ctx context.Context, orgSlug string, ema
 		return nil, err
 	}
 
-	addMemberPayload := &model.AddMemberPayload{}
+	addMemberPayload := &model.OperationPayload{}
 	if len(ousers) == 0 {
 		addMemberPayload.Success = false
 		addMemberPayload.Message = lt.Translate("The user for given email is not a member of given organization")
@@ -1338,7 +1338,7 @@ func (r *mutationResolver) DeleteMember(ctx context.Context, orgSlug string, ema
 }
 
 // ConfirmMember is the resolver for the confirmMember field.
-func (r *mutationResolver) ConfirmMember(ctx context.Context, key string) (*model.AddMemberPayload, error) {
+func (r *mutationResolver) ConfirmMember(ctx context.Context, key string) (*model.OperationPayload, error) {
 	lang := links.GetLangFromRequest(server.EchoForContext(ctx).Request(), nil)
 	lt := localizer.GetLocalizer(lang)
 	validator := valid.New(ctx)
@@ -1459,7 +1459,7 @@ func (r *mutationResolver) ConfirmMember(ctx context.Context, key string) (*mode
 		return nil, err
 	}
 
-	addMemberPayload := &model.AddMemberPayload{
+	addMemberPayload := &model.OperationPayload{
 		Success: true,
 		Message: lt.Translate("The user was added successfully"),
 	}
@@ -1921,7 +1921,7 @@ func (r *mutationResolver) UpdateProfile(ctx context.Context, input *model.Profi
 		int(user.ID),
 		c.RealIP(),
 		models.LOG_PROFILE_UPDATED,
-		fmt.Sprintf("Updated profile"),
+		"Updated profile",
 		mdata,
 	)
 	if err != nil {
@@ -4037,7 +4037,7 @@ func (r *mutationResolver) DeleteQRCode(ctx context.Context, id int) (*model.Del
 }
 
 // Follow is the resolver for the follow field.
-func (r *mutationResolver) Follow(ctx context.Context, orgSlug string) (*model.FollowPayload, error) {
+func (r *mutationResolver) Follow(ctx context.Context, orgSlug string) (*model.OperationPayload, error) {
 	tokenUser := oauth2.ForContext(ctx)
 	user := tokenUser.User.(*models.User)
 	lang := links.GetLangFromRequest(server.EchoForContext(ctx).Request(), user)
@@ -4104,7 +4104,7 @@ func (r *mutationResolver) Follow(ctx context.Context, orgSlug string) (*model.F
 		}
 	}
 
-	payload := &model.FollowPayload{
+	payload := &model.OperationPayload{
 		Success: true,
 		Message: lt.Translate("User follows %s", orgSlug),
 	}
@@ -4112,7 +4112,7 @@ func (r *mutationResolver) Follow(ctx context.Context, orgSlug string) (*model.F
 }
 
 // Unfollow is the resolver for the unfollow field.
-func (r *mutationResolver) Unfollow(ctx context.Context, orgSlug string) (*model.FollowPayload, error) {
+func (r *mutationResolver) Unfollow(ctx context.Context, orgSlug string) (*model.OperationPayload, error) {
 	tokenUser := oauth2.ForContext(ctx)
 	user := tokenUser.User.(*models.User)
 	lang := links.GetLangFromRequest(server.EchoForContext(ctx).Request(), user)
@@ -4181,13 +4181,186 @@ func (r *mutationResolver) Unfollow(ctx context.Context, orgSlug string) (*model
 		return nil, err
 	}
 
-	payload := &model.FollowPayload{
+	payload := &model.OperationPayload{
 		Success: true,
 		Message: lt.Translate("User unfollows %s", orgSlug),
 	}
 	return payload, nil
 }
 
+// DeleteTag is the resolver for the deleteTag field.
+func (r *mutationResolver) DeleteTag(ctx context.Context, input model.TagInput) (*model.DeletePayload, error) {
+	tokenUser := oauth2.ForContext(ctx)
+	if tokenUser == nil {
+		return nil, valid.ErrAuthorization
+	}
+	user := tokenUser.User.(*models.User)
+	c := server.EchoForContext(ctx)
+	lang := links.GetLangFromRequest(c.Request(), user)
+	lt := localizer.GetLocalizer(lang)
+	validator := valid.New(ctx)
+
+	validator.Expect(domain.ValidateDomainService(string(input.Service)),
+		"%s", lt.Translate("Invalid service value.")).
+		WithField("service").
+		WithCode(valid.ErrValidationCode)
+
+	if !validator.Ok() {
+		return nil, nil
+	}
+
+	org, err := user.GetOrgsSlug(ctx, models.OrgUserPermissionWrite, input.OrgSlug)
+	if err != nil {
+		return nil, err
+	}
+	if org == nil {
+		validator.Error("%s", lt.Translate("Organization not found.")).
+			WithField("orgSlug").
+			WithCode(valid.ErrNotFoundCode)
+		return nil, nil
+	}
+
+	topts := &database.FilterOptions{
+		Filter: sq.Eq{"t.slug": links.Slugify(input.Tag)},
+	}
+	tags, err := models.GetTags(ctx, topts)
+	if err != nil {
+		return nil, err
+	}
+	if len(tags) == 0 {
+		validator.Error("%s", lt.Translate("Tag not found.")).
+			WithField("tag").
+			WithCode(valid.ErrNotFoundCode)
+		return nil, nil
+	}
+	tag := tags[0]
+
+	err = org.DeleteTagForService(ctx, string(input.Service), tag)
+	if err != nil {
+		return nil, err
+	}
+
+	mdata := make(map[string]any)
+	mdata["org_id"] = org.ID
+	mdata["org_slug"] = org.Slug
+	mdata["service"] = string(input.Service)
+	mdata["tag"] = tag.Slug
+	err = models.RecordAuditLog(
+		ctx,
+		int(user.ID),
+		c.RealIP(),
+		models.LOG_TAG_DELETED,
+		fmt.Sprintf("Deleted tag '%s' from service %s", tag.Slug, input.Service),
+		mdata,
+	)
+	if err != nil {
+		return nil, err
+	}
+
+	payload := &model.DeletePayload{
+		Success:  true,
+		ObjectID: input.Tag,
+	}
+	return payload, nil
+}
+
+// RenameTag is the resolver for the renameTag field.
+func (r *mutationResolver) RenameTag(ctx context.Context, input model.TagInput) (*model.OperationPayload, error) {
+	tokenUser := oauth2.ForContext(ctx)
+	if tokenUser == nil {
+		return nil, valid.ErrAuthorization
+	}
+	user := tokenUser.User.(*models.User)
+	c := server.EchoForContext(ctx)
+	lang := links.GetLangFromRequest(c.Request(), user)
+	lt := localizer.GetLocalizer(lang)
+	validator := valid.New(ctx)
+
+	validator.Expect(domain.ValidateDomainService(string(input.Service)),
+		"%s", lt.Translate("Invalid service value.")).
+		WithField("service").
+		WithCode(valid.ErrValidationCode)
+	validator.Expect(input.NewTag != nil && *input.NewTag != "",
+		"%s", lt.Translate("New tag is required.")).
+		WithField("newTag").
+		WithCode(valid.ErrValidationCode)
+
+	if !validator.Ok() {
+		return nil, nil
+	}
+
+	org, err := user.GetOrgsSlug(ctx, models.OrgUserPermissionWrite, input.OrgSlug)
+	if err != nil {
+		return nil, err
+	}
+	if org == nil {
+		validator.Error("%s", lt.Translate("Organization not found.")).
+			WithField("orgSlug").
+			WithCode(valid.ErrNotFoundCode)
+		return nil, nil
+	}
+
+	opts := &database.FilterOptions{
+		Filter: sq.Eq{"t.slug": links.Slugify(input.Tag)},
+	}
+	tags, err := models.GetTags(ctx, opts)
+	if err != nil {
+		return nil, err
+	}
+	if len(tags) == 0 {
+		validator.Error("%s", lt.Translate("Tag not found.")).
+			WithField("tag").
+			WithCode(valid.ErrNotFoundCode)
+		return nil, nil
+	}
+	oTag := tags[0]
+
+	tagIDs, err := links.ProcessTags(ctx, []string{*input.NewTag})
+	if err != nil {
+		return nil, err
+	}
+	if len(tagIDs) == 0 {
+		validator.Error("%s", lt.Translate("newTag value is not valid.")).
+			WithField("newTag").
+			WithCode(valid.ErrValidationCode)
+		return nil, nil
+	}
+	nTag := &models.Tag{ID: tagIDs[0]}
+	err = nTag.Load(ctx)
+	if err != nil {
+		return nil, err
+	}
+
+	err = org.RenameTagForService(ctx, string(input.Service), oTag, nTag)
+	if err != nil {
+		return nil, err
+	}
+
+	mdata := make(map[string]any)
+	mdata["org_id"] = org.ID
+	mdata["org_slug"] = org.Slug
+	mdata["service"] = string(input.Service)
+	mdata["old_tag"] = oTag.Slug
+	mdata["new_tag"] = nTag.Slug
+	err = models.RecordAuditLog(
+		ctx,
+		int(user.ID),
+		c.RealIP(),
+		models.LOG_TAG_RENAMED,
+		fmt.Sprintf("Renamed tag '%s' to '%s' for service %s", oTag.Slug, nTag.Slug, input.Service),
+		mdata,
+	)
+	if err != nil {
+		return nil, err
+	}
+
+	payload := &model.OperationPayload{
+		Success: true,
+		Message: lt.Translate("Tag renamed successfully"),
+	}
+	return payload, nil
+}
+
 // UpdateAdminOrgType is the resolver for the updateAdminOrgType field.
 func (r *mutationResolver) UpdateAdminOrg(ctx context.Context, input model.AdminUpdateOrgInput) (*models.Organization, error) {
 	tokenUser := oauth2.ForContext(ctx)
@@ -4810,7 +4983,7 @@ func (r *qRCodeResolver) CodeType(ctx context.Context, obj *models.QRCode) (mode
 func (r *queryResolver) Version(ctx context.Context) (*model.Version, error) {
 	return &model.Version{
 		Major:           0,
-		Minor:           6,
+		Minor:           7,
 		Patch:           0,
 		DeprecationDate: nil,
 	}, nil
@@ -5447,6 +5620,17 @@ func (r *queryResolver) GetTags(ctx context.Context, input model.GetTagsInput) (
 	ctx = timezone.Context(ctx, links.GetUserTZ(user))
 	validator := valid.New(ctx)
 
+	if input.Service != nil {
+		validator.Expect(domain.ValidateDomainService(string(*input.Service)),
+			"%s", lt.Translate("Invalid service value.")).
+			WithField("service").
+			WithCode(valid.ErrValidationCode)
+	}
+
+	if !validator.Ok() {
+		return nil, nil
+	}
+
 	if input.After != nil && input.Before != nil {
 		validator.Error("%s", lt.Translate("You can not send both after and before cursors")).
 			WithCode(valid.ErrValidationGlobalCode)
@@ -5485,7 +5669,7 @@ func (r *queryResolver) GetTags(ctx context.Context, input model.GetTagsInput) (
 
 	opts := &database.FilterOptions{
 		Filter:  fq,
-		Limit:   500,
+		Limit:   250,
 		OrderBy: "name ASC",
 	}
 
diff --git a/internal/translations/catalog.go b/internal/translations/catalog.go
index 8dc2add..fd16d7f 100644
--- a/internal/translations/catalog.go
+++ b/internal/translations/catalog.go
@@ -39,89 +39,89 @@ func init() {
 }
 
 var messageKeyToIndex = map[string]int{
-	" you can host your own instance if you'd like full control over your own platform.": 412,
-	"%s":                                       437,
-	"%s Links":                                 529,
-	"%s: domain not found":                     683,
-	"- LinkTaco Team":                          337,
-	"100%% open source project":                411,
-	"A link was successfully created.":         489,
-	"A list was successfully created.":         623,
-	"A new link was created succesfully":       664,
+	" you can host your own instance if you'd like full control over your own platform.": 416,
+	"%s":                                       441,
+	"%s Links":                                 533,
+	"%s: domain not found":                     687,
+	"- LinkTaco Team":                          341,
+	"100%% open source project":                415,
+	"A link was successfully created.":         493,
+	"A list was successfully created.":         627,
+	"A new link was created succesfully":       668,
 	"A new member invitation was sent to %s":   166,
 	"A new register invitation was sent to %s": 164,
-	"A new short was created succesfully":      662,
-	"A new window called Library will open":    562,
-	"A valid Organizaiton Slug is required.":   252,
-	"API Powered":                              392,
-	"About":                                    591,
-	"Access Restricted":                        272,
-	"Access denied.":                           273,
+	"A new short was created succesfully":      666,
+	"A new window called Library will open":    566,
+	"A valid Organizaiton Slug is required.":   257,
+	"API Powered":                              396,
+	"About":                                    595,
+	"Access Restricted":                        277,
+	"Access denied.":                           278,
 	"Action":                                   11,
 	"Actions":                                  40,
-	"Add":                                      305,
-	"Add Link":                                 689,
-	"Add Member":                               463,
-	"Add OAuth2 Client":                        307,
-	"Add Personal Access Token":                294,
+	"Add":                                      309,
+	"Add Link":                                 693,
+	"Add Member":                               467,
+	"Add OAuth2 Client":                        311,
+	"Add Personal Access Token":                298,
 	"Add to LinkTaco":                          48,
-	"Add unlimited members to organization":    382,
-	"Admin":                                    601,
-	"Admin Write":                              468,
-	"Advanced Search":                          505,
-	"Advanced filtering/search":                359,
-	"All":                                      516,
+	"Add unlimited members to organization":    386,
+	"Admin":                                    605,
+	"Admin Write":                              472,
+	"Advanced Search":                          509,
+	"Advanced filtering/search":                363,
+	"All":                                      520,
 	"Already have an account? Click here to login": 58,
-	"An invitation was sent to this user":          469,
-	"An note was successfully created.":            584,
-	"An short link was successfully created.":      676,
+	"An invitation was sent to this user":          473,
+	"An note was successfully created.":            588,
+	"An short link was successfully created.":      680,
 	"Analytics":   106,
 	"Apply":       112,
-	"Approve":     332,
-	"Archive":     522,
-	"Archive URL": 486,
-	"As system admin run this command in the channel you want to connect": 555,
+	"Approve":     336,
+	"Archive":     526,
+	"Archive URL": 490,
+	"As system admin run this command in the channel you want to connect": 559,
 	"Audit Log":                            7,
-	"Authorize":                            327,
-	"Authorized Clients":                   290,
+	"Authorize":                            331,
+	"Authorized Clients":                   294,
 	"Back":                                 25,
-	"Back Home":                            279,
-	"BaseURL Not Found":                    264,
-	"Blog":                                 603,
-	"Bookmark '%s' on LinkTaco.com":        535,
-	"Bookmark successfully deleted":        539,
+	"Back Home":                            283,
+	"BaseURL Not Found":                    269,
+	"Blog":                                 607,
+	"Bookmark '%s' on LinkTaco.com":        539,
+	"Bookmark successfully deleted":        543,
 	"Bookmarklet":                          47,
-	"Bookmarks":                            354,
-	"Browser bookmark widget":              424,
-	"Build Your Own Integration":           385,
-	"Business":                             346,
-	"By":                                   502,
+	"Bookmarks":                            358,
+	"Browser bookmark widget":              428,
+	"Build Your Own Integration":           389,
+	"Business":                             350,
+	"By":                                   506,
 	"CNAME record for domain is incorrect": 208,
 	"Cancel":                               26,
-	"Categories":                           590,
+	"Categories":                           594,
 	"Change Email":                         85,
 	"Change Password":                      64,
 	"Change password":                      41,
-	"Chrome Bookmarks":                     576,
+	"Chrome Bookmarks":                     580,
 	"City":                                 109,
-	"City analytics":                       379,
-	"Clear":                                508,
-	"Click analytics":                      376,
+	"City analytics":                       383,
+	"Clear":                                512,
+	"Click analytics":                      380,
 	"Click here to upgrade":                116,
-	"Click on Manage Bookmarks from the Bookmarks menu":                                         561,
-	"Click on on Export Bookmarks":                                                              570,
-	"Click on the icon that has two arrows (up and down) and choose 'Export Bookmarks to HTML'": 564,
-	"Client Applications":                                                                       598,
-	"Client Description":                                                                        308,
-	"Client ID":                                                                                 303,
-	"Client Name":                                                                               291,
-	"Client Secret":                                                                             311,
-	"Client URL":                                                                                310,
-	"Clients":                                                                                   302,
+	"Click on Manage Bookmarks from the Bookmarks menu":                                         565,
+	"Click on on Export Bookmarks":                                                              574,
+	"Click on the icon that has two arrows (up and down) and choose 'Export Bookmarks to HTML'": 568,
+	"Client Applications":                                                                       602,
+	"Client Description":                                                                        312,
+	"Client ID":                                                                                 307,
+	"Client Name":                                                                               295,
+	"Client Secret":                                                                             315,
+	"Client URL":                                                                                314,
+	"Clients":                                                                                   306,
 	"Code is invalid.":                                                                          238,
-	"Collaboration":                                                                             418,
-	"Collaboration / Integrations":                                                              381,
-	"Comment":                                                                                   285,
+	"Collaboration":                                                                             422,
+	"Collaboration / Integrations":                                                              385,
+	"Comment":                                                                                   289,
 	"Complete Registration":                                                                     51,
 	"Confirm":                                                                                   102,
 	"Confirm New Password":                                                                      67,
@@ -130,78 +130,78 @@ var messageKeyToIndex = map[string]int{
 	"Confirmation Not Found":                                                                    172,
 	"Confirmation User Not Found":                                                               191,
 	"Confirmation key is required.":                                                             171,
-	"Connect":                                                                                   557,
-	"Connect Mattermost":                                                                        642,
-	"Connect User":                                                                              648,
-	"Connect to Slack Workspace":                                                                696,
-	"Connected":                                                                                 558,
+	"Connect":                                                                                   561,
+	"Connect Mattermost":                                                                        646,
+	"Connect User":                                                                              652,
+	"Connect to Slack Workspace":                                                                700,
+	"Connected":                                                                                 562,
 	"Continue to Upgrade":                                                                       2,
 	"Country":                                                                                   108,
-	"Country analytics":                                                                         378,
-	"Create":                                                                                    632,
-	"Create Domain":                                                                             432,
-	"Create Link":                                                                               479,
-	"Create Links":                                                                              611,
-	"Create List":                                                                               622,
-	"Create Note":                                                                               583,
-	"Create Organization":                                                                       453,
-	"Create QR Code":                                                                            631,
-	"Create Short Link":                                                                         673,
-	"Create link listings (ie, social media bios, etc.)": 363,
-	"Creation Date":                       626,
+	"Country analytics":                                                                         382,
+	"Create":                                                                                    636,
+	"Create Domain":                                                                             436,
+	"Create Link":                                                                               483,
+	"Create Links":                                                                              615,
+	"Create List":                                                                               626,
+	"Create Note":                                                                               587,
+	"Create Organization":                                                                       457,
+	"Create QR Code":                                                                            635,
+	"Create Short Link":                                                                         677,
+	"Create link listings (ie, social media bios, etc.)": 367,
+	"Creation Date":                       630,
 	"Current Organization":                37,
 	"Current Password":                    65,
-	"Current password given is incorrect": 703,
+	"Current password given is incorrect": 707,
 	"CurrentSlug is required":             129,
-	"Custom background image":             634,
-	"Custom domain + SSL":                 361,
+	"Custom background image":             638,
+	"Custom domain + SSL":                 365,
 	"Days":                                114,
-	"Default Bookmark Visibility":         455,
+	"Default Bookmark Visibility":         459,
 	"Default Lang":                        20,
 	"Default Language":                    35,
 	"DefaultLang is required":             194,
-	"Delete":                              426,
-	"Delete Bookmark":                     537,
-	"Delete Domain":                       436,
-	"Delete List":                         607,
-	"Delete Org Member":                   471,
-	"Delete Picture":                      617,
-	"Delete QR Code":                      548,
-	"Delete Short Link":                   679,
-	"Delete member %s (%s) from Organization %s?": 474,
-	"Description":              321,
+	"Delete":                              430,
+	"Delete Bookmark":                     541,
+	"Delete Domain":                       440,
+	"Delete List":                         611,
+	"Delete Org Member":                   475,
+	"Delete Picture":                      621,
+	"Delete QR Code":                      552,
+	"Delete Short Link":                   683,
+	"Delete member %s (%s) from Organization %s?": 478,
+	"Description":              325,
 	"Description is required.": 154,
 	"Details":                  12,
-	"Device analytics":         380,
+	"Device analytics":         384,
 	"Devices":                  111,
-	"Disabled":                 446,
-	"Disconnect":               556,
-	"Disconnect Mattermost":    639,
-	"Disconnect Slack":         690,
-	"Do you really want to disconnect this organization from mattermost":        641,
-	"Do you really want to disconnect this organization from slack":             692,
-	"Do you really whant to delete this bookmark?":                              540,
-	"Do you really whant to delete this domain":                                 440,
-	"Do you really whant to delete this link":                                   610,
-	"Do you really whant to delete this list":                                   630,
-	"Do you really whant to delete this qr code":                                551,
-	"Do you want to connect this organization to mattermost?":                   644,
-	"Do you want to connect with slack?":                                        698,
-	"Do you want to delete":                                                     542,
-	"Do you want to proceed?":                                                   650,
-	"Do you want to revoke this personal access token? This can not be undone.": 297,
-	"Documentation":                          398,
-	"Domain":                                 615,
-	"Domain List":                            425,
+	"Disabled":                 450,
+	"Disconnect":               560,
+	"Disconnect Mattermost":    643,
+	"Disconnect Slack":         694,
+	"Do you really want to disconnect this organization from mattermost":        645,
+	"Do you really want to disconnect this organization from slack":             696,
+	"Do you really whant to delete this bookmark?":                              544,
+	"Do you really whant to delete this domain":                                 444,
+	"Do you really whant to delete this link":                                   614,
+	"Do you really whant to delete this list":                                   634,
+	"Do you really whant to delete this qr code":                                555,
+	"Do you want to connect this organization to mattermost?":                   648,
+	"Do you want to connect with slack?":                                        702,
+	"Do you want to delete":                                                     546,
+	"Do you want to proceed?":                                                   654,
+	"Do you want to revoke this personal access token? This can not be undone.": 301,
+	"Documentation":                          402,
+	"Domain":                                 619,
+	"Domain List":                            429,
 	"Domain Not Found":                       221,
-	"Domain created successfully":            435,
-	"Domain in use. Can not change service.": 255,
-	"Domain not found":                       661,
-	"Domain successfully deleted":            438,
+	"Domain created successfully":            439,
+	"Domain in use. Can not change service.": 260,
+	"Domain not found":                       665,
+	"Domain successfully deleted":            442,
 	"DomainID is required":                   214,
-	"Domains":                                448,
-	"Download":                               633,
-	"Download Image":                         547,
+	"Domains":                                452,
+	"Download":                               637,
+	"Download Image":                         551,
 	"Drag and drop this button to your web browser toolbar or your bookmarks.": 50,
 	"Duplicated short code":               222,
 	"Edit":                                38,
@@ -212,399 +212,402 @@ var messageKeyToIndex = map[string]int{
 	"Email":                               34,
 	"Email Address":                       56,
 	"Email is required":                   179,
-	"Email is required.":                  257,
+	"Email is required.":                  262,
 	"Email may not exceed 255 characters": 159,
 	"Email updated successfully":          91,
-	"Enabled":                             445,
+	"Enabled":                             449,
 	"Engagements over time":               107,
 	"English":                             28,
 	"Enter New Password":                  68,
 	"Error checking the DNS entry for domain. Please try again later": 207,
 	"Error compiling url regex: %s":                                   156,
-	"Error fetching referenced link: %v":                              491,
-	"Error fetching referenced note: %v":                              585,
-	"Error fetching referenced url: Not found":                        490,
-	"Every account can create unlimited organizations. Each organization has it's own bookmarks, listings, analytics, etc. All of the features below belong to each organization with their own unique URL's, groupings, and so on.": 342,
-	"Exclude Tags":                        507,
-	"Expired":                             287,
-	"Explore Features":                    415,
-	"Export":                              450,
-	"Export Data":                         552,
-	"Export in JSON or HTML":              391,
-	"Failed the '%s' tag.":                707,
-	"Feature":                             343,
-	"Feed":                                501,
-	"File format":                         553,
-	"Filter/Search listings":              365,
-	"Filter/Search shorts":                372,
-	"Firefox Bookmarks":                   577,
-	"Follow":                              523,
-	"Follow other organizations (social)": 357,
-	"Following":                           498,
-	"Followings":                          509,
+	"Error fetching referenced link: %v":                              495,
+	"Error fetching referenced note: %v":                              589,
+	"Error fetching referenced url: Not found":                        494,
+	"Every account can create unlimited organizations. Each organization has it's own bookmarks, listings, analytics, etc. All of the features below belong to each organization with their own unique URL's, groupings, and so on.": 346,
+	"Exclude Tags":                        511,
+	"Expired":                             291,
+	"Explore Features":                    419,
+	"Export":                              454,
+	"Export Data":                         556,
+	"Export in JSON or HTML":              395,
+	"Failed the '%s' tag.":                711,
+	"Feature":                             347,
+	"Feed":                                505,
+	"File format":                         557,
+	"Filter/Search listings":              369,
+	"Filter/Search shorts":                376,
+	"Firefox Bookmarks":                   581,
+	"Follow":                              527,
+	"Follow other organizations (social)": 361,
+	"Following":                           502,
+	"Followings":                          513,
 	"Forgot Password?":                    75,
-	"Free":                                344,
+	"Free":                                348,
 	"Free accounts are only allowed 1 link listing.":                                              226,
 	"Free organizations are not allowed to create private links. Please upgrade":                  148,
 	"Free organizations are not allowed to create private notes. Please upgrade":                  155,
 	"Free organizations can not use Private permission. Please upgrade to use Private permission": 138,
-	"Full Analytics":          367,
-	"Full GraphQL API Access": 393,
+	"Full Analytics":          371,
+	"Full GraphQL API Access": 397,
 	"Full Name":               52,
-	"Full RSS feeds":          360,
-	"Full analytics history":  374,
-	"Fully open source":       396,
-	"GQL Playground":          594,
-	"Go to https://pinboard.in/export/ and click on JSON":  571,
-	"Go to the Bookmarks menu and choose Bookmark Manager": 567,
-	"Go to the File menu and chose Export":                 565,
-	"Grants":                                               292,
-	"GraphQL Playground":                                   277,
-	"Help":                                                 602,
-	"Here you can mix all your link saving and sharing needs in one tight little bundle. Much like a taco. A link taco if you will.": 402,
-	"Hi there,":                          335,
-	"Host your own version of Link Taco": 397,
+	"Full RSS feeds":          364,
+	"Full analytics history":  378,
+	"Fully open source":       400,
+	"GQL Playground":          598,
+	"Go to https://pinboard.in/export/ and click on JSON":  575,
+	"Go to the Bookmarks menu and choose Bookmark Manager": 571,
+	"Go to the File menu and chose Export":                 569,
+	"Grants":                                               296,
+	"GraphQL Playground":                                   281,
+	"Help":                                                 606,
+	"Here you can mix all your link saving and sharing needs in one tight little bundle. Much like a taco. A link taco if you will.": 406,
+	"Hi there,":                          339,
+	"Host your own version of Link Taco": 401,
 	"ID can't be lower than 0.":          235,
 	"ID is required.":                    233,
 	"IP Address":                         8,
 	"Id required":                        223,
-	"If OAuth 2.0 bearer tokens issued for your OAuth client, or your client secret, have been disclosed to a third-party, you must revoke all tokens and have replacements issued.": 315,
+	"If OAuth 2.0 bearer tokens issued for your OAuth client, or your client secret, have been disclosed to a third-party, you must revoke all tokens and have replacements issued.": 319,
 	"If the email address given exists in our system then we just sent it a login link. Click this link to reset your password. The link expires in 1 hour.":                         76,
 	"If you didn't request this link you can safely delete this email now.":                                                                                                          103,
 	"Image":                24,
-	"Import":               451,
-	"Import / Export":      386,
-	"Import Data":          559,
-	"Import Export":        420,
-	"Import from Chrome":   389,
-	"Import from Firefox":  388,
-	"Import from Pinboard": 387,
-	"Import from Safari":   390,
-	"In order to interact with Link Taco you have to connect you slack account with your link user":          694,
-	"In order to interact with the mattermost you have to connect your account with your link user":          649,
-	"In the left sidebar select the folder that you want to export":                                          568,
-	"In the left sidebar select the folder you want to export. To export all bookmarks select All Bookmarks": 563,
-	"In the top bookmark bar click on the three points at the top right":                                     569,
-	"Inactive Domain":                                  338,
-	"Include Tags":                                     506,
-	"Informative URL":                                  322,
-	"Installed successfully":                           666,
-	"Instructions":                                     574,
-	"Integrations":                                     419,
+	"Import":               455,
+	"Import / Export":      390,
+	"Import Data":          563,
+	"Import Export":        424,
+	"Import from Chrome":   393,
+	"Import from Firefox":  392,
+	"Import from Pinboard": 391,
+	"Import from Safari":   394,
+	"In order to interact with Link Taco you have to connect you slack account with your link user":          698,
+	"In order to interact with the mattermost you have to connect your account with your link user":          653,
+	"In the left sidebar select the folder that you want to export":                                          572,
+	"In the left sidebar select the folder you want to export. To export all bookmarks select All Bookmarks": 567,
+	"In the top bookmark bar click on the three points at the top right":                                     573,
+	"Inactive Domain":                                  342,
+	"Include Tags":                                     510,
+	"Informative URL":                                  326,
+	"Installed successfully":                           670,
+	"Instructions":                                     578,
+	"Integrations":                                     423,
 	"Invalid Confirmation Target":                      174,
 	"Invalid Confirmation Type":                        173,
 	"Invalid Email":                                    186,
 	"Invalid FQDN format":                              201,
-	"Invalid ID ":                                      254,
+	"Invalid ID ":                                      259,
 	"Invalid Key":                                      185,
 	"Invalid Permission":                               161,
 	"Invalid URL.":                                     141,
 	"Invalid Visibility value.":                        140,
-	"Invalid code type":                                270,
+	"Invalid code type":                                275,
 	"Invalid default permission value":                 139,
 	"Invalid domain ID.":                               209,
 	"Invalid domain name.":                             197,
-	"Invalid domain value given":                       628,
-	"Invalid email and/or password":                    700,
+	"Invalid domain value given":                       632,
+	"Invalid email and/or password":                    704,
 	"Invalid email format":                             160,
-	"Invalid level value.":                             250,
-	"Invalid listing ID provided":                      275,
-	"Invalid listing for specified organization":       276,
-	"Invalid orgType":                                  248,
-	"Invalid organization given":                       669,
-	"Invalid origin source for importer.":              280,
+	"Invalid level value.":                             255,
+	"Invalid listing ID provided":                      279,
+	"Invalid listing for specified organization":       280,
+	"Invalid orgType":                                  253,
+	"Invalid organization given":                       673,
+	"Invalid origin source for importer.":              284,
 	"Invalid permissions for Organization ID":          203,
 	"Invalid service value.":                           198,
-	"Invalid slack response":                           697,
-	"Invalid status value.":                            251,
-	"Invalid tag cloud type without organization slug": 265,
-	"Invalid visibility":                               249,
+	"Invalid slack response":                           701,
+	"Invalid status value.":                            256,
+	"Invalid tag cloud type without organization slug": 270,
+	"Invalid visibility":                               254,
 	"Is Active":                                        33,
-	"Is Default":                                       616,
-	"Is Enabled":                                       461,
-	"Issued":                                           286,
-	"Just wanted to let you know that your bookmark import has completed successfully!": 336,
+	"Is Default":                                       620,
+	"Is Enabled":                                       465,
+	"Issued":                                           290,
+	"Just wanted to let you know that your bookmark import has completed successfully!": 340,
 	"Key is required":      190,
 	"Lang is invalid":      195,
-	"Link Detail":          532,
+	"Link Detail":          536,
 	"Link Listing":         10,
-	"Link Listings":        362,
-	"Link Lists":           417,
+	"Link Listings":        366,
+	"Link Lists":           421,
 	"Link Not Found":       152,
-	"Link Search":          686,
-	"Link Short Not Found": 269,
-	"Link Shortening":      369,
-	"Link Shortner":        430,
+	"Link Search":          690,
+	"Link Short Not Found": 274,
+	"Link Shortening":      373,
+	"Link Shortner":        434,
 	"Link Taco: Invitation to join organization":  167,
 	"Link hash required":                          149,
-	"Link listings: Linktree et al":               408,
-	"Link shortening: Bitly et al":                407,
-	"Link successfully deleted":                   609,
-	"Link successfully updated.":                  543,
+	"Link listings: Linktree et al":               412,
+	"Link shortening: Bitly et al":                411,
+	"Link successfully deleted":                   613,
+	"Link successfully updated.":                  547,
 	"LinkOrder can't be lower than 0.":            231,
 	"LinkTaco - Confirm account email":            99,
-	"LinkTaco - Your bookmark import is complete": 334,
-	"LinkTaco is an open source platform where you can host all of your links. Custom domains, QR codes, Analytics, full API, multiple organizations w/unlimited members are just some of what's included.": 403,
+	"LinkTaco - Your bookmark import is complete": 338,
+	"LinkTaco is an open source platform where you can host all of your links. Custom domains, QR codes, Analytics, full API, multiple organizations w/unlimited members are just some of what's included.": 407,
 	"Links":                                120,
 	"Links - Reset your password":          74,
-	"Linktaco: Invitation to Register":     259,
+	"Linktaco: Invitation to Register":     264,
 	"List Not Found":                       240,
-	"List successfully deleted":            629,
-	"Listing":                              368,
+	"List successfully deleted":            633,
+	"Listing":                              372,
 	"Listing Link Not Found":               236,
 	"Listing Not Found":                    232,
-	"Listing successfully updated.":        621,
+	"Listing successfully updated.":        625,
 	"ListingSlug is required.":             230,
-	"Lists":                                599,
-	"Log in":                               592,
-	"Log out":                              593,
+	"Lists":                                603,
+	"Log in":                               596,
+	"Log out":                              597,
 	"Login":                                86,
 	"Login Email":                          88,
-	"Lookup Name":                          427,
-	"Manage":                               304,
-	"Manage Links":                         624,
-	"Manage Members":                       449,
-	"Manage Subscription":                  447,
+	"Lookup Name":                          431,
+	"Manage":                               308,
+	"Manage Links":                         628,
+	"Manage Members":                       453,
+	"Manage Subscription":                  451,
 	"Manage Your Organizations":            44,
-	"Mark as read":                         518,
-	"Mark as unread":                       519,
-	"MatterMost Integration":               384,
-	"Mattermost successfully disconnected": 640,
-	"Member List":                          477,
-	"Member added succesxfully":            475,
-	"Member successfully deleted":          473,
+	"Mark as read":                         522,
+	"Mark as unread":                       523,
+	"MatterMost Integration":               388,
+	"Mattermost successfully disconnected": 644,
+	"Member List":                          481,
+	"Member added succesxfully":            479,
+	"Member successfully deleted":          477,
 	"Members":                              39,
-	"Members can add/edit/remove links (if allowed)":   422,
-	"Members have access based on permissions granted": 423,
-	"Migrate Short Links":                              433,
-	"Most popular links on LinkTaco.com":               495,
+	"Members can add/edit/remove links (if allowed)":   426,
+	"Members have access based on permissions granted": 427,
+	"Migrate Short Links":                              437,
+	"Most popular links on LinkTaco.com":               499,
 	"Name":                                             22,
 	"Name is required":                                 122,
-	"Name is required.":                                256,
+	"Name is required.":                                261,
 	"Name may not exceed 150 characters":               123,
 	"Name may not exceed 255 characters":               199,
 	"Name may not exceed 500 characters":               200,
 	"New Password":                                     66,
-	"New passwords do not match":                       701,
+	"New passwords do not match":                       705,
+	"New tag is required.":                             250,
 	"Next":                                             15,
-	"No Clients":                                       306,
+	"No Clients":                                       310,
 	"No Data":                                          121,
-	"No Domain":                                        675,
-	"No Domains":                                       431,
-	"No Links":                                         613,
-	"No Lists":                                         625,
-	"No QR Codes":                                      638,
-	"No Short Links":                                   672,
-	"No URL argument was given":                        682,
+	"No Domain":                                        679,
+	"No Domains":                                       435,
+	"No Links":                                         617,
+	"No Lists":                                         629,
+	"No QR Codes":                                      642,
+	"No Short Links":                                   676,
+	"No URL argument was given":                        686,
 	"No accounts? Click here to create one":            87,
 	"No audit logs to display":                         14,
-	"No default organization found":                    670,
-	"No links were found for %s":                       655,
-	"No members":                                       478,
-	"No organization found":                            656,
-	"No organizations":                                 500,
+	"No default organization found":                    674,
+	"No links were found for %s":                       659,
+	"No members":                                       482,
+	"No organization found":                            660,
+	"No organizations":                                 504,
 	"No personal organization found for this user":     196,
-	"No slack connection found":                        652,
-	"No, nevermind":                                    299,
-	"Not Found":                                        263,
-	"Note":                                             580,
-	"Note '%s' on LinkTaco.com":                        581,
-	"Note: Your access token <strong>will never be shown to you again.</strong> Keep this secret. It will expire a year from now.": 295,
-	"Note: Your client secret will never be shown to you again.":                                                                   312,
-	"OAuth 2.0 client management": 313,
-	"OAuth 2.0 client registered": 323,
-	"OAuth2 Support":              394,
-	"Old links won't work. All code will be moved to the new domain.":                              434,
-	"Only members with read perm are allowed to perform this action":                               266,
+	"No slack connection found":                        656,
+	"No, nevermind":                                    303,
+	"Not Found":                                        268,
+	"Note":                                             584,
+	"Note '%s' on LinkTaco.com":                        585,
+	"Note: Your access token <strong>will never be shown to you again.</strong> Keep this secret. It will expire a year from now.": 299,
+	"Note: Your client secret will never be shown to you again.":                                                                   316,
+	"OAuth 2.0 client management": 317,
+	"OAuth 2.0 client registered": 327,
+	"OAuth2 Support":              398,
+	"Old links won't work. All code will be moved to the new domain.":                              438,
+	"Only members with read perm are allowed to perform this action":                               271,
 	"Only members with write perm are allowed to perform this action":                              147,
 	"Only showing country data. Upgrade your organization to paid to view all stats":               117,
 	"Only showing the last 60 days. Upgrade your organization to paid to view all historical data": 115,
 	"Only superusers can delete system level domains":                                              211,
-	"Only superusers can fetch system level domains":                                               268,
-	"Open Source":          442,
-	"Order":                606,
+	"Only superusers can fetch system level domains":                                               273,
+	"Open Source":          446,
+	"Order":                610,
 	"Org Not Found":        218,
 	"Org Slug is required": 225,
-	"Org Username":         454,
+	"Org Username":         458,
 	"Org slug is required": 157,
-	"Org slug is required for this kind of token":          271,
+	"Org slug is required for this kind of token":          276,
 	"Org slug is required.":                                143,
 	"Org username is required":                             124,
 	"Org username may not exceed 150 characters":           125,
 	"Organizaiton Slug is required.":                       202,
 	"Organization":                                         9,
 	"Organization Not Found":                               132,
-	"Organization Slug is required for user level domains": 253,
-	"Organization created successfully":                    459,
-	"Organization linked successfully with mattermost":     646,
-	"Organization linked successfully with slack":          699,
-	"Organization not found.":                              274,
-	"Organization updated successfully":                    462,
+	"Organization Slug is required for user level domains": 258,
+	"Organization created successfully":                    463,
+	"Organization linked successfully with mattermost":     650,
+	"Organization linked successfully with slack":          703,
+	"Organization not found.":                              248,
+	"Organization updated successfully":                    466,
 	"Organizations":                                        36,
-	"Organize Bookmarks":                                   416,
-	"Organize by tags":                                     358,
-	"Organize listings by tag":                             364,
-	"Organize shorts by tags":                              371,
-	"Other":                                                618,
-	"Other Name":                                           619,
-	"Paid":                                                 444,
+	"Organize Bookmarks":                                   420,
+	"Organize by tags":                                     362,
+	"Organize listings by tag":                             368,
+	"Organize shorts by tags":                              375,
+	"Other":                                                622,
+	"Other Name":                                           623,
+	"Paid":                                                 448,
 	"Password":                                             53,
 	"Password Changed":                                     70,
 	"Password changed successfully":                        90,
 	"Password is required":                                 180,
 	"Password may not exceed 100 characters":               181,
-	"Payment History":                                      452,
-	"Peace Pinboard. Bye Bitly. Later Linktree. Hello LinkTaco!": 409,
-	"Permission":             464,
+	"Payment History":                                      456,
+	"Peace Pinboard. Bye Bitly. Later Linktree. Hello LinkTaco!": 413,
+	"Permission":             468,
 	"Permission Not Found":   175,
-	"Personal":               345,
-	"Personal Access Tokens": 284,
-	"Personal Tokens":        597,
-	"Please click in the following link to tie a org %s":                               665,
-	"Please click the link below:":                                                     261,
+	"Personal":               349,
+	"Personal Access Tokens": 288,
+	"Personal Tokens":        601,
+	"Please click in the following link to tie a org %s":                               669,
+	"Please click the link below:":                                                     266,
 	"Please confirm your account":                                                      100,
-	"Please enter a valid email address.":                                              705,
-	"Please enter a valid phone number.":                                               706,
-	"Please link your slack user with link: %s":                                        687,
+	"Please enter a valid email address.":                                              709,
+	"Please enter a valid phone number.":                                               710,
+	"Please link your slack user with link: %s":                                        691,
 	"Please login to view multiple tag combos (sorry, this is to help stop bot abuse)": 6,
-	"Please upgrade to a Business organization to add members":                         465,
-	"Please upgrade your account to reactivate it":                                     340,
-	"Popular":           589,
-	"Popular Bookmarks": 493,
-	"Popular Links":     497,
+	"Please upgrade to a Business organization to add members":                         469,
+	"Please upgrade your account to reactivate it":                                     344,
+	"Popular":           593,
+	"Popular Bookmarks": 497,
+	"Popular Links":     501,
 	"Prev":              16,
-	"Previous":          612,
-	"Price":             347,
-	"Pricing":           341,
-	"Pricing and feature details for LinkTaco.com": 399,
-	"Private":                        458,
-	"Private Post":                   534,
+	"Previous":          616,
+	"Price":             351,
+	"Pricing":           345,
+	"Pricing and feature details for LinkTaco.com": 403,
+	"Private":                        462,
+	"Private Post":                   538,
 	"Profile updated successfully":   29,
-	"Public":                         457,
-	"Public Post":                    533,
-	"Public only":                    352,
-	"QR Code Details":                546,
-	"QR Code Listing":                636,
+	"Public":                         461,
+	"Public Post":                    537,
+	"Public only":                    356,
+	"QR Code Details":                550,
+	"QR Code Listing":                640,
 	"QR Code Not Found":              244,
-	"QR Code specific analytics":     375,
-	"QR Code succesfully created":    635,
-	"QR Code successfully deleted":   550,
-	"QR Codes":                       627,
-	"QR Codes powered by Link Taco!": 544,
+	"QR Code specific analytics":     379,
+	"QR Code succesfully created":    639,
+	"QR Code successfully deleted":   554,
+	"QR Codes":                       631,
+	"QR Codes powered by Link Taco!": 548,
 	"QR Scans":                       119,
-	"Read":                           466,
-	"Ready to get started? It's free to make an account and use it forever (with some limitations). To use all features you have to pay just a few bucks a year, or a few per month if you're a business, and that's it. Simple!": 414,
-	"Recent":           588,
-	"Recent Bookmarks": 515,
-	"Recent Links":     528,
-	"Recent bookmarks for URL %s added on LinkTaco.com": 512,
-	"Recent public links added to %s on LinkTaco.com":   526,
-	"Recent public links added to LinkTaco.com":         527,
-	"Redirect URL":                309,
-	"Referer analyitcs":           377,
+	"Read":                           470,
+	"Ready to get started? It's free to make an account and use it forever (with some limitations). To use all features you have to pay just a few bucks a year, or a few per month if you're a business, and that's it. Simple!": 418,
+	"Recent":           592,
+	"Recent Bookmarks": 519,
+	"Recent Links":     532,
+	"Recent bookmarks for URL %s added on LinkTaco.com": 516,
+	"Recent public links added to %s on LinkTaco.com":   530,
+	"Recent public links added to LinkTaco.com":         531,
+	"Redirect URL":                313,
+	"Referer analyitcs":           381,
 	"Referrer":                    110,
 	"Register":                    55,
-	"Register Invitation":         258,
+	"Register Invitation":         263,
 	"Registration Completed":      54,
 	"Registration is not enabled": 184,
 	"Registration is not enabled on this system. Contact the admin for an account.": 61,
-	"Reject":                        333,
+	"Reject":                        337,
 	"Reset Password":                69,
 	"Restricted Page":               0,
-	"Revoke":                        288,
-	"Revoke Personal Access Token":  296,
-	"Revoke client tokens":          316,
-	"Revoke tokens & client secret": 314,
-	"Safari Bookmarks":              575,
+	"Revoke":                        292,
+	"Revoke Personal Access Token":  300,
+	"Revoke client tokens":          320,
+	"Revoke tokens & client secret": 318,
+	"Safari Bookmarks":              579,
 	"Save":                          19,
-	"Save Link":                     595,
-	"Save Note":                     596,
-	"Save public/private links":     355,
-	"Save public/private notes":     356,
-	"Saved Bookmarks":               510,
-	"Scopes":                        331,
-	"Search":                        503,
-	"See the installation documentation for more.": 413,
-	"Select Export Bookmarks":                      566,
-	"Self Hosting":                                 395,
+	"Save Link":                     599,
+	"Save Note":                     600,
+	"Save public/private links":     359,
+	"Save public/private notes":     360,
+	"Saved Bookmarks":               514,
+	"Scopes":                        335,
+	"Search":                        507,
+	"See the installation documentation for more.": 417,
+	"Select Export Bookmarks":                      570,
+	"Self Hosting":                                 399,
 	"Send Reset Link":                              77,
-	"Service":                                      428,
+	"Service":                                      432,
 	"Set up your account, so you can save links.":  60,
 	"Settings":                                     30,
-	"Short Code":                                   674,
+	"Short Code":                                   678,
 	"Short Code may not exceed 20 characters":      216,
-	"Short Link":                                   671,
-	"Short Link successfully deleted":              680,
-	"Short Links":                                  600,
+	"Short Link":                                   675,
+	"Short Link successfully deleted":              684,
+	"Short Links":                                  604,
 	"Short Not Found":                              242,
-	"Short link successfully updated.":             678,
-	"Since we're a":                                410,
-	"Slack Integration":                            383,
-	"Slack successfully disconnected":              691,
+	"Short link successfully updated.":             682,
+	"Since we're a":                                414,
+	"Slack Integration":                            387,
+	"Slack successfully disconnected":              695,
 	"Slug":                                         31,
 	"Slug is required":                             130,
 	"Slug is required.":                            224,
 	"Slug may not exceed 150 characters":           131,
-	"Social Links":                                 620,
-	"Social bookmarking is not new, it's just been forgotten. Link shortening with analytics has been around forever. Link listings became cool once social media started allowing us to post a link to our websites in our profiles.": 404,
+	"Social Links":                                 624,
+	"Social bookmarking is not new, it's just been forgotten. Link shortening with analytics has been around forever. Link listings became cool once social media started allowing us to post a link to our websites in our profiles.": 408,
 	"Social bookmarking plus link sharing, shortening and listings all in one app.":                                              3,
-	"Social bookmarking: Pinboard (Delicious)":                                                                                   406,
+	"Social bookmarking: Pinboard (Delicious)":                                                                                   410,
 	"Someone, possibly you, requested this login via email link. To login to your account, just click the link below:":           89,
 	"Someone, possibly you, requested to reset your Links email address.  To complete this update, just click the link below:":   83,
 	"Someone, possibly you, requested to reset your Links password.":                                                             78,
-	"Something went wrong, impossible to send invitation":                                                                        470,
-	"Something went wrong. Impossible to get the member data":                                                                    476,
-	"Something went wrong. The QR Code could not be deleted.":                                                                    549,
-	"Something went wrong. The link could not be deleted.":                                                                       608,
-	"Something went wrong. The user could not be linked.":                                                                        695,
-	"Something went wrong. This bookmark could not be deleted.":                                                                  538,
-	"Something went wrong. This member could not be deleted: %s":                                                                 472,
-	"Sorry, free accounts do not support Mattermost Integration. Please upgrade to continue":                                     647,
-	"Sorry, free accounts do not support Slack Integration. Please upgrade to continue":                                          693,
-	"Sorry, you have exceeded the amount of free accounts available. Please update your current free account to create one more": 456,
-	"Source":                             560,
+	"Something went wrong, impossible to send invitation":                                                                        474,
+	"Something went wrong. Impossible to get the member data":                                                                    480,
+	"Something went wrong. The QR Code could not be deleted.":                                                                    553,
+	"Something went wrong. The link could not be deleted.":                                                                       612,
+	"Something went wrong. The user could not be linked.":                                                                        699,
+	"Something went wrong. This bookmark could not be deleted.":                                                                  542,
+	"Something went wrong. This member could not be deleted: %s":                                                                 476,
+	"Sorry, free accounts do not support Mattermost Integration. Please upgrade to continue":                                     651,
+	"Sorry, free accounts do not support Slack Integration. Please upgrade to continue":                                          697,
+	"Sorry, you have exceeded the amount of free accounts available. Please update your current free account to create one more": 460,
+	"Source":                             564,
 	"Spanish":                            27,
-	"Sponsored":                          443,
-	"Star":                               520,
-	"Starred":                            483,
-	"Store Dashboard":                    586,
-	"Submit Query":                       278,
+	"Sponsored":                          447,
+	"Star":                               524,
+	"Starred":                            487,
+	"Store Dashboard":                    590,
+	"Submit Query":                       282,
 	"Subscription":                       32,
 	"Successful login.":                  98,
-	"Successfully added client":          324,
-	"Successfully added personal access": 300,
-	"Successfully reissued client.":      326,
-	"Successfully revoked authorization token.":                      301,
-	"Successfully revoked client.":                                   325,
-	"Tags":                                                           484,
+	"Successfully added client":          328,
+	"Successfully added personal access": 304,
+	"Successfully reissued client.":      330,
+	"Successfully revoked authorization token.":                      305,
+	"Successfully revoked client.":                                   329,
+	"Tag not found.":                                                 249,
+	"Tag renamed successfully":                                       252,
+	"Tags":                                                           488,
 	"Tags may not exceed 10":                                         146,
-	"The %s domain is currently inactive":                            339,
+	"The %s domain is currently inactive":                            343,
 	"The User is not verified":                                       177,
 	"The User you try to invite is not verified":                     165,
-	"The code is required":                                           659,
+	"The code is required":                                           663,
 	"The domain is already registered in the system":                 205,
-	"The domain is required":                                         660,
-	"The file is required":                                           281,
-	"The file submitted for this source should be html":              282,
-	"The file submitted for this source should be json":              283,
+	"The domain is required":                                         664,
+	"The file is required":                                           285,
+	"The file submitted for this source should be html":              286,
+	"The file submitted for this source should be json":              287,
 	"The member was removed successfully":                            170,
 	"The passwords you entered do not match.":                        17,
-	"The text to be searched is required":                            654,
-	"The title is required":                                          657,
-	"The url is required":                                            658,
+	"The text to be searched is required":                            658,
+	"The title is required":                                          661,
+	"The url is required":                                            662,
 	"The user for given email is not a member of given organization": 169,
 	"The user was added successfully":                                178,
 	"There is already a default listing for this domain":             229,
 	"There is already a domain registered for given service":         206,
 	"This Slug is already registered for this domain":                228,
 	"This account is currently unable to access the system.":         97,
-	"This ain't a popularity contest or anything but this is weird that there are no links!": 494,
+	"This ain't a popularity contest or anything but this is weird that there are no links!": 498,
 	"This email domain is not allowed":                                                                       162,
 	"This email is already registered":                                                                       187,
-	"This feature is not allowed for free user. Please upgrade.":                                             554,
-	"This feature is restricted to free accounts. Please upgrade.":                                           645,
-	"This feed has no links. Booo!":                                                                          511,
-	"This field is required.":                                                                                704,
+	"This feature is not allowed for free user. Please upgrade.":                                             558,
+	"This feature is restricted to free accounts. Please upgrade.":                                           649,
+	"This feed has no links. Booo!":                                                                          515,
+	"This field is required.":                                                                                708,
 	"This function is only allowed for business users.":                                                      163,
 	"This function is only allowed for paid users.":                                                          204,
 	"This function is only allowed for paid users. Please upgrade":                                           1,
@@ -617,17 +620,17 @@ var messageKeyToIndex = map[string]int{
 	"This shortCode can not be used. Please chose another one":                                               217,
 	"This slug can not be used. Please chose another one":                                                    134,
 	"This special link allows you to save to LinkTaco directly by using a bookmark in your web browser.":     49,
-	"This team is already tied to an organization":                                                           643,
+	"This team is already tied to an organization":                                                           647,
 	"This user does not follow this org":                                                                     246,
 	"This user is not allowed to perform this action":                                                        153,
 	"This username can not be used. Please chose another one":                                                188,
 	"This username is already registered":                                                                    189,
-	"This will permanently unregister your OAuth 2.0 client":                                                 318,
+	"This will permanently unregister your OAuth 2.0 client":                                                 322,
 	"Timestamp":                           13,
 	"Timezone":                            21,
 	"Timezone is invalid":                 193,
 	"Timezone is required":                192,
-	"Title":                               480,
+	"Title":                               484,
 	"Title is required":                   234,
 	"Title is required.":                  144,
 	"Title is too long.":                  237,
@@ -635,121 +638,122 @@ var messageKeyToIndex = map[string]int{
 	"Title may not exceed 500 characters": 145,
 	"To complete your password reset, just click the link below:":                                      79,
 	"To confirm your email address and complete your Links registration, please click the link below.": 101,
-	"Tour":                                 587,
-	"Try It FREE":                          353,
-	"URL":                                  605,
-	"URL Shortening powered by Link Taco!": 681,
+	"Tour":                                 591,
+	"Try It FREE":                          357,
+	"URL":                                  609,
+	"URL Shortening powered by Link Taco!": 685,
 	"URL is required.":                     213,
 	"URL may not exceed 2048 characters":   142,
 	"Unable to delete. Domain has active short links or link listings": 212,
-	"Unable to find suitable organization":                             267,
-	"Unfollow":                                                         499,
-	"Unlimited":                                                        351,
-	"Unlimited QR codes per listing":                                   366,
-	"Unlimited QR codes per short":                                     373,
-	"Unlimited link listings (for social media bios, etc.)":            421,
-	"Unlimited short links":                                            370,
-	"Unread":                                                           482,
-	"Unregister":                                                       320,
-	"Unregister this OAuth client":                                     317,
-	"Unstar":                                                           521,
-	"Untagged":                                                         517,
-	"Up until now, all of these things were hosted on different services.": 405,
+	"Unable to find suitable organization":                             272,
+	"Unfollow":                                                         503,
+	"Unlimited":                                                        355,
+	"Unlimited QR codes per listing":                                   370,
+	"Unlimited QR codes per short":                                     377,
+	"Unlimited link listings (for social media bios, etc.)":            425,
+	"Unlimited short links":                                            374,
+	"Unread":                                                           486,
+	"Unregister":                                                       324,
+	"Unregister this OAuth client":                                     321,
+	"Unstar":                                                           525,
+	"Untagged":                                                         521,
+	"Up until now, all of these things were hosted on different services.": 409,
 	"Update Email":        81,
-	"Update Link":         541,
-	"Update Links":        604,
-	"Update List":         614,
-	"Update Note":         579,
-	"Update Organization": 460,
-	"Update Short Link":   677,
+	"Update Link":         545,
+	"Update Links":        608,
+	"Update List":         618,
+	"Update Note":         583,
+	"Update Organization": 464,
+	"Update Short Link":   681,
 	"Update email":        42,
 	"Upgrade Org":         45,
-	"Upgrade the organization to activate them.":                 531,
-	"Upgrade your account to support private bookmarks.":         573,
+	"Upgrade the organization to activate them.":                 535,
+	"Upgrade your account to support private bookmarks.":         577,
 	"Upgrade your organization to paid to view the detail stats": 118,
-	"Url is required": 663,
-	"Use commas to separate your tags. Example: tag 1, tag 2, tag 3": 485,
+	"Url is required": 667,
+	"Use commas to separate your tags. Example: tag 1, tag 2, tag 3": 489,
 	"User Not Found":                         176,
-	"User connected successfully":            651,
+	"User connected successfully":            655,
 	"User email is required":                 158,
 	"User follows %s":                        245,
-	"User is not authenticated":              702,
+	"User is not authenticated":              706,
 	"User not found for given email":         168,
 	"User unfollows %s":                      247,
 	"Username":                               23,
 	"Username is required":                   182,
 	"Username may not exceed 150 characters": 183,
-	"View":                                   637,
+	"View":                                   641,
 	"View Audit Logs":                        46,
-	"Visibility":                             481,
+	"Visibility":                             485,
 	"We sent you a confirmation email. Please click the link in that email to confirm your account.":     62,
-	"We sent you a direct message with instructions":                                                     688,
+	"We sent you a direct message with instructions":                                                     692,
 	"We sent you a new confirmation email. Please click the link in that email to confirm your account.": 105,
-	"We sent you a private msg": 653,
+	"We sent you a private msg": 657,
 	"Weeks":                     113,
-	"Welcome to LinkTaco!":      401,
+	"Welcome to LinkTaco!":      405,
 	"Welcome to LinkTaco! Here you can mix all your link saving and sharing needs in one tight little bundle. Much like a taco. A link taco if you will.": 4,
 	"Welcome to Links": 59,
-	"Write":            467,
-	"Yes":              439,
-	"Yes, do it":       298,
+	"Write":            471,
+	"Yes":              443,
+	"Yes, do it":       302,
 	"You are not allowed to create more free organizations. Please upgrade to a paid org": 126,
 	"You are not allowed to edit this field for notes":                                    151,
 	"You are not allowed to enable/disabled user type organization":                       135,
 	"You are not allowed to have more than two free organizations. Please upgrade":        136,
-	"You can also submit via the":                                                         488,
-	"You can not send both after and before cursors":                                      262,
+	"You can also submit via the":                                                         492,
+	"You can not send both after and before cursors":                                      267,
 	"You can now": 71,
 	"You can't create more than 5 qr codes per lists.":                                          241,
 	"You can't create more than 5 qr codes per shorts.":                                         243,
-	"You have %d restricted link(s) saved.":                                                     530,
-	"You have been invited by %s to join Link Taco":                                             260,
-	"You have not created any personal access tokens for your account.":                         289,
-	"You have not granted any third party clients access to your account.":                      293,
+	"You have %d restricted link(s) saved.":                                                     534,
+	"You have been invited by %s to join Link Taco":                                             265,
+	"You have not created any personal access tokens for your account.":                         293,
+	"You have not granted any third party clients access to your account.":                      297,
 	"You have reached your monthly short link limit. Please upgrade to remove this limitation.": 219,
 	"You have successfully registered your account. You can now login.":                         63,
-	"You may revoke this access at any time on the OAuth tab of your account profile.":          330,
+	"You may revoke this access at any time on the OAuth tab of your account profile.":          334,
 	"You must verify your email address before logging in":                                      96,
-	"You will be redirected in 10 seconds.":                                                     545,
+	"You will be redirected in 10 seconds.":                                                     549,
 	"You've been logged out successfully.":                                                      92,
 	"You've been sent a confirmation email. Please click the link in the email to confirm your email change. The confirmation email will expire in 2 hours.": 82,
 	"You've successfully confirmed your email address.":                               95,
 	"You've successfully updated your email address.":                                 94,
 	"You've successfully updated your password.":                                      93,
-	"Your Organizations":                                                              441,
-	"Your bookmark import is being processed. We will notify you once it's complete.": 578,
-	"Your feed is empty :( Go follow some people. Try the Popular or Recent feeds to find some interesting people to follow.": 504,
-	"Your importing into a free account / organization, any private pinboard bookmarks will be marked restricted.":            572,
-	"Your link was successfully saved. Details here: %s":                                                                      685,
-	"Your short link was successfully created: %s":                                                                            684,
+	"Your Organizations":                                                              445,
+	"Your bookmark import is being processed. We will notify you once it's complete.": 582,
+	"Your feed is empty :( Go follow some people. Try the Popular or Recent feeds to find some interesting people to follow.": 508,
+	"Your importing into a free account / organization, any private pinboard bookmarks will be marked restricted.":            576,
+	"Your link was successfully saved. Details here: %s":                                                                      689,
+	"Your short link was successfully created: %s":                                                                            688,
 	"and login": 73,
-	"bookmark":  492,
-	"bookmark, note, detail, popular, links, linktaco": 536,
-	"bookmarklet":       487,
-	"done":              668,
-	"for":               429,
+	"bookmark":  496,
+	"bookmark, note, detail, popular, links, linktaco": 540,
+	"bookmarklet":       491,
+	"done":              672,
+	"for":               433,
 	"invalid domain ID": 210,
-	"is a third-party application operated by": 329,
+	"is a third-party application operated by": 333,
 	"list-service-domain is not configured":    227,
-	"months":                                   350,
-	"newest":                                   524,
-	"note, detail, popular, links, linktaco":   582,
-	"oldest":                                   525,
-	"per month":                                349,
-	"per year":                                 348,
-	"popular, links, linktaco, feature, plans, pricing plans":                  496,
-	"pricing, links, linktaco, feature, plans, pricing plans":                  400,
-	"recent, public, links, linktaco":                                          513,
+	"months":                                   354,
+	"newTag value is not valid.":               251,
+	"newest":                                   528,
+	"note, detail, popular, links, linktaco":   586,
+	"oldest":                                   529,
+	"per month":                                353,
+	"per year":                                 352,
+	"popular, links, linktaco, feature, plans, pricing plans":                  500,
+	"pricing, links, linktaco, feature, plans, pricing plans":                  404,
+	"recent, public, links, linktaco":                                          517,
 	"return to the login page":                                                 72,
-	"revoke all tokens issued to it, and prohibit the issuance of new tokens.": 319,
-	"saved":                                  514,
+	"revoke all tokens issued to it, and prohibit the issuance of new tokens.": 323,
+	"saved":                                  518,
 	"short-service-domain is not configured": 220,
 	"social bookmarks, bookmarking, links, link sharing, link shortening, link listings, bookmarks, link saving, qr codes, analytics": 5,
-	"something went wrong: %s":                        667,
-	"would like to access to your Link Taco account.": 328,
+	"something went wrong: %s":                        671,
+	"would like to access to your Link Taco account.": 332,
 }
 
-var enIndex = []uint32{ // 709 elements
+var enIndex = []uint32{ // 713 elements
 	// Entry 0 - 1F
 	0x00000000, 0x00000010, 0x0000004d, 0x00000061,
 	0x000000af, 0x00000143, 0x000001c3, 0x00000214,
@@ -820,140 +824,141 @@ var enIndex = []uint32{ // 709 elements
 	0x00001eba, 0x00001ed1, 0x00001ee4, 0x00001ef5,
 	0x00001f0c, 0x00001f1b, 0x00001f4c, 0x00001f5c,
 	0x00001f8e, 0x00001fa0, 0x00001fb3, 0x00001fd6,
-	0x00001feb, 0x00001ffb, 0x0000200e, 0x00002023,
-	0x00002039, 0x00002060, 0x00002095, 0x000020a5,
+	0x00001feb, 0x00002003, 0x00002012, 0x00002027,
+	0x00002042, 0x0000205b, 0x0000206b, 0x0000207e,
 	// Entry 100 - 11F
-	0x000020cc, 0x000020de, 0x000020f1, 0x00002105,
-	0x00002126, 0x00002157, 0x00002174, 0x000021a3,
-	0x000021ad, 0x000021bf, 0x000021f0, 0x0000222f,
-	0x00002254, 0x00002283, 0x00002298, 0x000022aa,
-	0x000022d6, 0x000022e8, 0x000022f7, 0x0000230f,
-	0x0000232b, 0x00002356, 0x00002369, 0x00002376,
-	0x00002380, 0x000023a4, 0x000023b9, 0x000023eb,
-	0x0000241d, 0x00002434, 0x0000243c, 0x00002443,
+	0x00002093, 0x000020a9, 0x000020d0, 0x00002105,
+	0x00002115, 0x0000213c, 0x0000214e, 0x00002161,
+	0x00002175, 0x00002196, 0x000021c7, 0x000021e4,
+	0x00002213, 0x0000221d, 0x0000222f, 0x00002260,
+	0x0000229f, 0x000022c4, 0x000022f3, 0x00002308,
+	0x0000231a, 0x00002346, 0x00002358, 0x00002367,
+	0x00002383, 0x000023ae, 0x000023c1, 0x000023ce,
+	0x000023d8, 0x000023fc, 0x00002411, 0x00002443,
 	// Entry 120 - 13F
-	0x0000244b, 0x00002452, 0x00002494, 0x000024a7,
-	0x000024b3, 0x000024ba, 0x000024ff, 0x00002519,
-	0x00002596, 0x000025b3, 0x000025fd, 0x00002608,
-	0x00002616, 0x00002639, 0x00002663, 0x0000266b,
-	0x00002675, 0x0000267c, 0x00002680, 0x0000268b,
-	0x0000269d, 0x000026b0, 0x000026bd, 0x000026c8,
-	0x000026d6, 0x00002711, 0x0000272d, 0x0000274b,
-	0x000027fa, 0x0000280f, 0x0000282c, 0x00002863,
+	0x00002475, 0x0000248c, 0x00002494, 0x0000249b,
+	0x000024a3, 0x000024aa, 0x000024ec, 0x000024ff,
+	0x0000250b, 0x00002512, 0x00002557, 0x00002571,
+	0x000025ee, 0x0000260b, 0x00002655, 0x00002660,
+	0x0000266e, 0x00002691, 0x000026bb, 0x000026c3,
+	0x000026cd, 0x000026d4, 0x000026d8, 0x000026e3,
+	0x000026f5, 0x00002708, 0x00002715, 0x00002720,
+	0x0000272e, 0x00002769, 0x00002785, 0x000027a3,
 	// Entry 140 - 15F
-	0x000028ac, 0x000028b7, 0x000028c3, 0x000028d3,
-	0x000028ef, 0x00002909, 0x00002926, 0x00002944,
-	0x0000294e, 0x0000297e, 0x000029a7, 0x000029f8,
-	0x000029ff, 0x00002a07, 0x00002a0e, 0x00002a3a,
-	0x00002a44, 0x00002a96, 0x00002aa6, 0x00002ab6,
-	0x00002add, 0x00002b0a, 0x00002b12, 0x00002bf1,
-	0x00002bf9, 0x00002bfe, 0x00002c07, 0x00002c10,
-	0x00002c16, 0x00002c1f, 0x00002c29, 0x00002c30,
+	0x00002852, 0x00002867, 0x00002884, 0x000028bb,
+	0x00002904, 0x0000290f, 0x0000291b, 0x0000292b,
+	0x00002947, 0x00002961, 0x0000297e, 0x0000299c,
+	0x000029a6, 0x000029d6, 0x000029ff, 0x00002a50,
+	0x00002a57, 0x00002a5f, 0x00002a66, 0x00002a92,
+	0x00002a9c, 0x00002aee, 0x00002afe, 0x00002b0e,
+	0x00002b35, 0x00002b62, 0x00002b6a, 0x00002c49,
+	0x00002c51, 0x00002c56, 0x00002c5f, 0x00002c68,
 	// Entry 160 - 17F
-	0x00002c3a, 0x00002c46, 0x00002c52, 0x00002c5c,
-	0x00002c76, 0x00002c90, 0x00002cb4, 0x00002cc5,
-	0x00002cdf, 0x00002cee, 0x00002d02, 0x00002d10,
-	0x00002d43, 0x00002d5c, 0x00002d73, 0x00002d92,
-	0x00002da1, 0x00002da9, 0x00002db9, 0x00002dcf,
-	0x00002de7, 0x00002dfc, 0x00002e19, 0x00002e30,
-	0x00002e4b, 0x00002e5b, 0x00002e6d, 0x00002e7f,
-	0x00002e8e, 0x00002e9f, 0x00002ebc, 0x00002ee2,
+	0x00002c6e, 0x00002c77, 0x00002c81, 0x00002c88,
+	0x00002c92, 0x00002c9e, 0x00002caa, 0x00002cb4,
+	0x00002cce, 0x00002ce8, 0x00002d0c, 0x00002d1d,
+	0x00002d37, 0x00002d46, 0x00002d5a, 0x00002d68,
+	0x00002d9b, 0x00002db4, 0x00002dcb, 0x00002dea,
+	0x00002df9, 0x00002e01, 0x00002e11, 0x00002e27,
+	0x00002e3f, 0x00002e54, 0x00002e71, 0x00002e88,
+	0x00002ea3, 0x00002eb3, 0x00002ec5, 0x00002ed7,
 	// Entry 180 - 19F
-	0x00002ef4, 0x00002f0b, 0x00002f26, 0x00002f36,
-	0x00002f4b, 0x00002f5f, 0x00002f72, 0x00002f85,
-	0x00002f9c, 0x00002fa8, 0x00002fc0, 0x00002fcf,
-	0x00002fdc, 0x00002fee, 0x00003011, 0x0000301f,
-	0x0000304c, 0x00003084, 0x00003099, 0x00003118,
-	0x000031de, 0x000032bf, 0x00003304, 0x0000332d,
-	0x0000334a, 0x00003368, 0x000033a3, 0x000033b1,
-	0x000033ca, 0x00003421, 0x0000344e, 0x0000352a,
+	0x00002ee6, 0x00002ef7, 0x00002f14, 0x00002f3a,
+	0x00002f4c, 0x00002f63, 0x00002f7e, 0x00002f8e,
+	0x00002fa3, 0x00002fb7, 0x00002fca, 0x00002fdd,
+	0x00002ff4, 0x00003000, 0x00003018, 0x00003027,
+	0x00003034, 0x00003046, 0x00003069, 0x00003077,
+	0x000030a4, 0x000030dc, 0x000030f1, 0x00003170,
+	0x00003236, 0x00003317, 0x0000335c, 0x00003385,
+	0x000033a2, 0x000033c0, 0x000033fb, 0x00003409,
 	// Entry 1A0 - 1BF
-	0x0000353b, 0x0000354e, 0x00003559, 0x00003567,
-	0x00003574, 0x00003582, 0x000035b8, 0x000035e7,
-	0x00003618, 0x00003630, 0x0000363c, 0x00003643,
-	0x0000364f, 0x00003657, 0x0000365b, 0x00003669,
-	0x00003674, 0x00003682, 0x00003696, 0x000036d6,
-	0x000036f2, 0x00003700, 0x00003706, 0x00003722,
-	0x00003726, 0x00003750, 0x00003763, 0x0000376f,
-	0x00003779, 0x0000377e, 0x00003786, 0x0000378f,
+	0x00003422, 0x00003479, 0x000034a6, 0x00003582,
+	0x00003593, 0x000035a6, 0x000035b1, 0x000035bf,
+	0x000035cc, 0x000035da, 0x00003610, 0x0000363f,
+	0x00003670, 0x00003688, 0x00003694, 0x0000369b,
+	0x000036a7, 0x000036af, 0x000036b3, 0x000036c1,
+	0x000036cc, 0x000036da, 0x000036ee, 0x0000372e,
+	0x0000374a, 0x00003758, 0x0000375e, 0x0000377a,
+	0x0000377e, 0x000037a8, 0x000037bb, 0x000037c7,
 	// Entry 1C0 - 1DF
-	0x000037a3, 0x000037ab, 0x000037ba, 0x000037c1,
-	0x000037c8, 0x000037d8, 0x000037ec, 0x000037f9,
-	0x00003815, 0x00003890, 0x00003897, 0x0000389f,
-	0x000038c1, 0x000038d5, 0x000038e0, 0x00003902,
-	0x0000390d, 0x00003918, 0x00003951, 0x00003956,
-	0x0000395c, 0x00003968, 0x0000398c, 0x000039c0,
-	0x000039d2, 0x00003a10, 0x00003a2c, 0x00003a61,
-	0x00003a7b, 0x00003ab3, 0x00003abf, 0x00003aca,
+	0x000037d1, 0x000037d6, 0x000037de, 0x000037e7,
+	0x000037fb, 0x00003803, 0x00003812, 0x00003819,
+	0x00003820, 0x00003830, 0x00003844, 0x00003851,
+	0x0000386d, 0x000038e8, 0x000038ef, 0x000038f7,
+	0x00003919, 0x0000392d, 0x00003938, 0x0000395a,
+	0x00003965, 0x00003970, 0x000039a9, 0x000039ae,
+	0x000039b4, 0x000039c0, 0x000039e4, 0x00003a18,
+	0x00003a2a, 0x00003a68, 0x00003a84, 0x00003ab9,
 	// Entry 1E0 - 1FF
-	0x00003ad6, 0x00003adc, 0x00003ae7, 0x00003aee,
-	0x00003af6, 0x00003afb, 0x00003b3a, 0x00003b46,
-	0x00003b52, 0x00003b6e, 0x00003b8f, 0x00003bb8,
-	0x00003bde, 0x00003be7, 0x00003bf9, 0x00003c50,
-	0x00003c73, 0x00003cab, 0x00003cb9, 0x00003cc3,
-	0x00003ccc, 0x00003cdd, 0x00003ce2, 0x00003ce5,
-	0x00003cec, 0x00003d64, 0x00003d74, 0x00003d81,
-	0x00003d8e, 0x00003d94, 0x00003d9f, 0x00003daf,
+	0x00003ad3, 0x00003b0b, 0x00003b17, 0x00003b22,
+	0x00003b2e, 0x00003b34, 0x00003b3f, 0x00003b46,
+	0x00003b4e, 0x00003b53, 0x00003b92, 0x00003b9e,
+	0x00003baa, 0x00003bc6, 0x00003be7, 0x00003c10,
+	0x00003c36, 0x00003c3f, 0x00003c51, 0x00003ca8,
+	0x00003ccb, 0x00003d03, 0x00003d11, 0x00003d1b,
+	0x00003d24, 0x00003d35, 0x00003d3a, 0x00003d3d,
+	0x00003d44, 0x00003dbc, 0x00003dcc, 0x00003dd9,
 	// Entry 200 - 21F
-	0x00003dcd, 0x00003e02, 0x00003e22, 0x00003e28,
-	0x00003e39, 0x00003e3d, 0x00003e46, 0x00003e53,
-	0x00003e62, 0x00003e67, 0x00003e6e, 0x00003e76,
-	0x00003e7d, 0x00003e84, 0x00003e8b, 0x00003ebe,
-	0x00003ee8, 0x00003ef5, 0x00003f01, 0x00003f2a,
-	0x00003f55, 0x00003f61, 0x00003f6d, 0x00003f7a,
-	0x00003f9b, 0x00003fcc, 0x00003fdc, 0x00004016,
-	0x00004034, 0x00004061, 0x0000406d, 0x00004083,
+	0x00003de6, 0x00003dec, 0x00003df7, 0x00003e07,
+	0x00003e25, 0x00003e5a, 0x00003e7a, 0x00003e80,
+	0x00003e91, 0x00003e95, 0x00003e9e, 0x00003eab,
+	0x00003eba, 0x00003ebf, 0x00003ec6, 0x00003ece,
+	0x00003ed5, 0x00003edc, 0x00003ee3, 0x00003f16,
+	0x00003f40, 0x00003f4d, 0x00003f59, 0x00003f82,
+	0x00003fad, 0x00003fb9, 0x00003fc5, 0x00003fd2,
+	0x00003ff3, 0x00004024, 0x00004034, 0x0000406e,
 	// Entry 220 - 23F
-	0x0000409e, 0x000040bd, 0x000040e3, 0x000040f3,
-	0x00004102, 0x00004111, 0x00004149, 0x00004166,
-	0x00004191, 0x0000419d, 0x000041a9, 0x000041e4,
-	0x00004228, 0x00004233, 0x0000423b, 0x00004245,
-	0x00004251, 0x00004258, 0x0000428a, 0x000042b0,
-	0x00004317, 0x00004371, 0x00004396, 0x000043ae,
-	0x000043e3, 0x00004421, 0x00004464, 0x00004481,
-	0x000044b5, 0x00004522, 0x00004555, 0x00004562,
+	0x0000408c, 0x000040b9, 0x000040c5, 0x000040db,
+	0x000040f6, 0x00004115, 0x0000413b, 0x0000414b,
+	0x0000415a, 0x00004169, 0x000041a1, 0x000041be,
+	0x000041e9, 0x000041f5, 0x00004201, 0x0000423c,
+	0x00004280, 0x0000428b, 0x00004293, 0x0000429d,
+	0x000042a9, 0x000042b0, 0x000042e2, 0x00004308,
+	0x0000436f, 0x000043c9, 0x000043ee, 0x00004406,
+	0x0000443b, 0x00004479, 0x000044bc, 0x000044d9,
 	// Entry 240 - 25F
-	0x00004573, 0x00004584, 0x00004596, 0x000045e6,
-	0x000045f2, 0x000045f7, 0x00004614, 0x0000463b,
-	0x00004647, 0x00004669, 0x0000468f, 0x0000469f,
-	0x000046a4, 0x000046ab, 0x000046b3, 0x000046be,
-	0x000046c4, 0x000046cb, 0x000046d3, 0x000046e2,
-	0x000046ec, 0x000046f6, 0x00004706, 0x0000471a,
-	0x00004720, 0x0000472c, 0x00004732, 0x00004737,
-	0x0000473c, 0x00004749, 0x0000474d, 0x00004753,
+	0x0000450d, 0x0000457a, 0x000045ad, 0x000045ba,
+	0x000045cb, 0x000045dc, 0x000045ee, 0x0000463e,
+	0x0000464a, 0x0000464f, 0x0000466c, 0x00004693,
+	0x0000469f, 0x000046c1, 0x000046e7, 0x000046f7,
+	0x000046fc, 0x00004703, 0x0000470b, 0x00004716,
+	0x0000471c, 0x00004723, 0x0000472b, 0x0000473a,
+	0x00004744, 0x0000474e, 0x0000475e, 0x00004772,
+	0x00004778, 0x00004784, 0x0000478a, 0x0000478f,
 	// Entry 260 - 27F
-	0x0000475f, 0x00004794, 0x000047ae, 0x000047d6,
-	0x000047e3, 0x000047ec, 0x000047f5, 0x00004801,
-	0x00004808, 0x00004813, 0x00004822, 0x00004828,
-	0x00004833, 0x00004840, 0x0000485e, 0x0000486a,
-	0x0000488b, 0x00004898, 0x000048a1, 0x000048af,
-	0x000048b8, 0x000048d3, 0x000048ed, 0x00004915,
-	0x00004924, 0x0000492b, 0x00004934, 0x0000494c,
-	0x00004968, 0x00004978, 0x0000497d, 0x00004989,
+	0x00004794, 0x000047a1, 0x000047a5, 0x000047ab,
+	0x000047b7, 0x000047ec, 0x00004806, 0x0000482e,
+	0x0000483b, 0x00004844, 0x0000484d, 0x00004859,
+	0x00004860, 0x0000486b, 0x0000487a, 0x00004880,
+	0x0000488b, 0x00004898, 0x000048b6, 0x000048c2,
+	0x000048e3, 0x000048f0, 0x000048f9, 0x00004907,
+	0x00004910, 0x0000492b, 0x00004945, 0x0000496d,
+	0x0000497c, 0x00004983, 0x0000498c, 0x000049a4,
 	// Entry 280 - 29F
-	0x0000499f, 0x000049c4, 0x00004a07, 0x00004a1a,
-	0x00004a47, 0x00004a7f, 0x00004abc, 0x00004aed,
-	0x00004b44, 0x00004b51, 0x00004baf, 0x00004bc7,
-	0x00004be3, 0x00004bfd, 0x00004c17, 0x00004c3b,
-	0x00004c59, 0x00004c6f, 0x00004c85, 0x00004c99,
-	0x00004cae, 0x00004cc5, 0x00004cd6, 0x00004cfa,
-	0x00004d0a, 0x00004d2d, 0x00004d63, 0x00004d7a,
-	0x00004d96, 0x00004d9b, 0x00004db6, 0x00004dd4,
+	0x000049c0, 0x000049d0, 0x000049d5, 0x000049e1,
+	0x000049f7, 0x00004a1c, 0x00004a5f, 0x00004a72,
+	0x00004a9f, 0x00004ad7, 0x00004b14, 0x00004b45,
+	0x00004b9c, 0x00004ba9, 0x00004c07, 0x00004c1f,
+	0x00004c3b, 0x00004c55, 0x00004c6f, 0x00004c93,
+	0x00004cb1, 0x00004cc7, 0x00004cdd, 0x00004cf1,
+	0x00004d06, 0x00004d1d, 0x00004d2e, 0x00004d52,
+	0x00004d62, 0x00004d85, 0x00004dbb, 0x00004dd2,
 	// Entry 2A0 - 2BF
-	0x00004ddf, 0x00004dee, 0x00004e00, 0x00004e0b,
-	0x00004e15, 0x00004e3d, 0x00004e4f, 0x00004e70,
-	0x00004e82, 0x00004ea2, 0x00004ec7, 0x00004ee1,
-	0x00004ef9, 0x00004f29, 0x00004f5f, 0x00004f6b,
-	0x00004f98, 0x00004fc7, 0x00004fd0, 0x00004fe1,
-	0x00005001, 0x0000503f, 0x00005091, 0x000050ef,
-	0x00005123, 0x0000513e, 0x00005155, 0x00005178,
-	0x000051a4, 0x000051c2, 0x000051dd, 0x000051f7,
+	0x00004dee, 0x00004df3, 0x00004e0e, 0x00004e2c,
+	0x00004e37, 0x00004e46, 0x00004e58, 0x00004e63,
+	0x00004e6d, 0x00004e95, 0x00004ea7, 0x00004ec8,
+	0x00004eda, 0x00004efa, 0x00004f1f, 0x00004f39,
+	0x00004f51, 0x00004f81, 0x00004fb7, 0x00004fc3,
+	0x00004ff0, 0x0000501f, 0x00005028, 0x00005039,
+	0x00005059, 0x00005097, 0x000050e9, 0x00005147,
+	0x0000517b, 0x00005196, 0x000051ad, 0x000051d0,
 	// Entry 2C0 - 2DF
-	0x0000521b, 0x00005233, 0x00005257, 0x0000527a,
-	0x00005292,
-} // Size: 2860 bytes
+	0x000051fc, 0x0000521a, 0x00005235, 0x0000524f,
+	0x00005273, 0x0000528b, 0x000052af, 0x000052d2,
+	0x000052ea,
+} // Size: 2876 bytes
 
-const enData string = "" + // Size: 21138 bytes
+const enData string = "" + // Size: 21226 bytes
 	"\x02Restricted Page\x02This function is only allowed for paid users. Ple" +
 	"ase upgrade\x02Continue to Upgrade\x02Social bookmarking plus link shari" +
 	"ng, shortening and listings all in one app.\x02Welcome to LinkTaco! Here" +
@@ -1078,209 +1083,210 @@ const enData string = "" + // Size: 21138 bytes
 	"can't create more than 5 qr codes per lists.\x02Short Not Found\x02You c" +
 	"an't create more than 5 qr codes per shorts.\x02QR Code Not Found\x02Use" +
 	"r follows %[1]s\x02This user does not follow this org\x02User unfollows " +
-	"%[1]s\x02Invalid orgType\x02Invalid visibility\x02Invalid level value." +
-	"\x02Invalid status value.\x02A valid Organizaiton Slug is required.\x02O" +
-	"rganization Slug is required for user level domains\x04\x00\x01 \x0b\x02" +
-	"Invalid ID\x02Domain in use. Can not change service.\x02Name is required" +
-	".\x02Email is required.\x02Register Invitation\x02Linktaco: Invitation t" +
-	"o Register\x02You have been invited by %[1]s to join Link Taco\x02Please" +
-	" click the link below:\x02You can not send both after and before cursors" +
-	"\x02Not Found\x02BaseURL Not Found\x02Invalid tag cloud type without org" +
-	"anization slug\x02Only members with read perm are allowed to perform thi" +
-	"s action\x02Unable to find suitable organization\x02Only superusers can " +
-	"fetch system level domains\x02Link Short Not Found\x02Invalid code type" +
-	"\x02Org slug is required for this kind of token\x02Access Restricted\x02" +
-	"Access denied.\x02Organization not found.\x02Invalid listing ID provided" +
-	"\x02Invalid listing for specified organization\x02GraphQL Playground\x02" +
-	"Submit Query\x02Back Home\x02Invalid origin source for importer.\x02The " +
-	"file is required\x02The file submitted for this source should be html" +
-	"\x02The file submitted for this source should be json\x02Personal Access" +
-	" Tokens\x02Comment\x02Issued\x02Expired\x02Revoke\x02You have not create" +
-	"d any personal access tokens for your account.\x02Authorized Clients\x02" +
-	"Client Name\x02Grants\x02You have not granted any third party clients ac" +
-	"cess to your account.\x02Add Personal Access Token\x02Note: Your access " +
-	"token <strong>will never be shown to you again.</strong> Keep this secre" +
-	"t. It will expire a year from now.\x02Revoke Personal Access Token\x02Do" +
-	" you want to revoke this personal access token? This can not be undone." +
-	"\x02Yes, do it\x02No, nevermind\x02Successfully added personal access" +
-	"\x02Successfully revoked authorization token.\x02Clients\x02Client ID" +
-	"\x02Manage\x02Add\x02No Clients\x02Add OAuth2 Client\x02Client Descripti" +
-	"on\x02Redirect URL\x02Client URL\x02Client Secret\x02Note: Your client s" +
-	"ecret will never be shown to you again.\x02OAuth 2.0 client management" +
-	"\x02Revoke tokens & client secret\x02If OAuth 2.0 bearer tokens issued f" +
-	"or your OAuth client, or your client secret, have been disclosed to a th" +
-	"ird-party, you must revoke all tokens and have replacements issued.\x02R" +
-	"evoke client tokens\x02Unregister this OAuth client\x02This will permane" +
-	"ntly unregister your OAuth 2.0 client\x02revoke all tokens issued to it," +
-	" and prohibit the issuance of new tokens.\x02Unregister\x02Description" +
-	"\x02Informative URL\x02OAuth 2.0 client registered\x02Successfully added" +
-	" client\x02Successfully revoked client.\x02Successfully reissued client." +
-	"\x02Authorize\x02would like to access to your Link Taco account.\x02is a" +
-	" third-party application operated by\x02You may revoke this access at an" +
-	"y time on the OAuth tab of your account profile.\x02Scopes\x02Approve" +
-	"\x02Reject\x02LinkTaco - Your bookmark import is complete\x02Hi there," +
-	"\x02Just wanted to let you know that your bookmark import has completed " +
-	"successfully!\x02- LinkTaco Team\x02Inactive Domain\x02The %[1]s domain " +
-	"is currently inactive\x02Please upgrade your account to reactivate it" +
-	"\x02Pricing\x02Every account can create unlimited organizations. Each or" +
-	"ganization has it's own bookmarks, listings, analytics, etc. All of the " +
-	"features below belong to each organization with their own unique URL's, " +
-	"groupings, and so on.\x02Feature\x02Free\x02Personal\x02Business\x02Pric" +
-	"e\x02per year\x02per month\x02months\x02Unlimited\x02Public only\x02Try " +
-	"It FREE\x02Bookmarks\x02Save public/private links\x02Save public/private" +
-	" notes\x02Follow other organizations (social)\x02Organize by tags\x02Adv" +
-	"anced filtering/search\x02Full RSS feeds\x02Custom domain + SSL\x02Link " +
-	"Listings\x02Create link listings (ie, social media bios, etc.)\x02Organi" +
-	"ze listings by tag\x02Filter/Search listings\x02Unlimited QR codes per l" +
-	"isting\x02Full Analytics\x02Listing\x02Link Shortening\x02Unlimited shor" +
-	"t links\x02Organize shorts by tags\x02Filter/Search shorts\x02Unlimited " +
-	"QR codes per short\x02Full analytics history\x02QR Code specific analyti" +
-	"cs\x02Click analytics\x02Referer analyitcs\x02Country analytics\x02City " +
-	"analytics\x02Device analytics\x02Collaboration / Integrations\x02Add unl" +
-	"imited members to organization\x02Slack Integration\x02MatterMost Integr" +
-	"ation\x02Build Your Own Integration\x02Import / Export\x02Import from Pi" +
-	"nboard\x02Import from Firefox\x02Import from Chrome\x02Import from Safar" +
-	"i\x02Export in JSON or HTML\x02API Powered\x02Full GraphQL API Access" +
-	"\x02OAuth2 Support\x02Self Hosting\x02Fully open source\x02Host your own" +
-	" version of Link Taco\x02Documentation\x02Pricing and feature details fo" +
-	"r LinkTaco.com\x02pricing, links, linktaco, feature, plans, pricing plan" +
-	"s\x02Welcome to LinkTaco!\x02Here you can mix all your link saving and s" +
-	"haring needs in one tight little bundle. Much like a taco. A link taco i" +
-	"f you will.\x02LinkTaco is an open source platform where you can host al" +
-	"l of your links. Custom domains, QR codes, Analytics, full API, multiple" +
-	" organizations w/unlimited members are just some of what's included.\x02" +
-	"Social bookmarking is not new, it's just been forgotten. Link shortening" +
-	" with analytics has been around forever. Link listings became cool once " +
-	"social media started allowing us to post a link to our websites in our p" +
-	"rofiles.\x02Up until now, all of these things were hosted on different s" +
-	"ervices.\x02Social bookmarking: Pinboard (Delicious)\x02Link shortening:" +
-	" Bitly et al\x02Link listings: Linktree et al\x02Peace Pinboard. Bye Bit" +
-	"ly. Later Linktree. Hello LinkTaco!\x02Since we're a\x02100% open source" +
-	" project\x04\x01 \x00R\x02you can host your own instance if you'd like f" +
-	"ull control over your own platform.\x02See the installation documentatio" +
-	"n for more.\x02Ready to get started? It's free to make an account and us" +
-	"e it forever (with some limitations). To use all features you have to pa" +
-	"y just a few bucks a year, or a few per month if you're a business, and " +
-	"that's it. Simple!\x02Explore Features\x02Organize Bookmarks\x02Link Lis" +
-	"ts\x02Collaboration\x02Integrations\x02Import Export\x02Unlimited link l" +
-	"istings (for social media bios, etc.)\x02Members can add/edit/remove lin" +
-	"ks (if allowed)\x02Members have access based on permissions granted\x02B" +
-	"rowser bookmark widget\x02Domain List\x02Delete\x02Lookup Name\x02Servic" +
-	"e\x02for\x02Link Shortner\x02No Domains\x02Create Domain\x02Migrate Shor" +
-	"t Links\x02Old links won't work. All code will be moved to the new domai" +
-	"n.\x02Domain created successfully\x02Delete Domain\x02%[1]s\x02Domain su" +
-	"ccessfully deleted\x02Yes\x02Do you really whant to delete this domain" +
-	"\x02Your Organizations\x02Open Source\x02Sponsored\x02Paid\x02Enabled" +
-	"\x02Disabled\x02Manage Subscription\x02Domains\x02Manage Members\x02Expo" +
-	"rt\x02Import\x02Payment History\x02Create Organization\x02Org Username" +
-	"\x02Default Bookmark Visibility\x02Sorry, you have exceeded the amount o" +
-	"f free accounts available. Please update your current free account to cr" +
-	"eate one more\x02Public\x02Private\x02Organization created successfully" +
-	"\x02Update Organization\x02Is Enabled\x02Organization updated successful" +
-	"ly\x02Add Member\x02Permission\x02Please upgrade to a Business organizat" +
-	"ion to add members\x02Read\x02Write\x02Admin Write\x02An invitation was " +
-	"sent to this user\x02Something went wrong, impossible to send invitation" +
-	"\x02Delete Org Member\x02Something went wrong. This member could not be " +
-	"deleted: %[1]s\x02Member successfully deleted\x02Delete member %[1]s (%[" +
-	"2]s) from Organization %[3]s?\x02Member added succesxfully\x02Something " +
-	"went wrong. Impossible to get the member data\x02Member List\x02No membe" +
-	"rs\x02Create Link\x02Title\x02Visibility\x02Unread\x02Starred\x02Tags" +
-	"\x02Use commas to separate your tags. Example: tag 1, tag 2, tag 3\x02Ar" +
-	"chive URL\x02bookmarklet\x02You can also submit via the\x02A link was su" +
-	"ccessfully created.\x02Error fetching referenced url: Not found\x02Error" +
-	" fetching referenced link: %[1]v\x02bookmark\x02Popular Bookmarks\x02Thi" +
-	"s ain't a popularity contest or anything but this is weird that there ar" +
-	"e no links!\x02Most popular links on LinkTaco.com\x02popular, links, lin" +
-	"ktaco, feature, plans, pricing plans\x02Popular Links\x02Following\x02Un" +
-	"follow\x02No organizations\x02Feed\x02By\x02Search\x02Your feed is empty" +
-	" :( Go follow some people. Try the Popular or Recent feeds to find some " +
-	"interesting people to follow.\x02Advanced Search\x02Include Tags\x02Excl" +
-	"ude Tags\x02Clear\x02Followings\x02Saved Bookmarks\x02This feed has no l" +
-	"inks. Booo!\x02Recent bookmarks for URL %[1]s added on LinkTaco.com\x02r" +
-	"ecent, public, links, linktaco\x02saved\x02Recent Bookmarks\x02All\x02Un" +
-	"tagged\x02Mark as read\x02Mark as unread\x02Star\x02Unstar\x02Archive" +
-	"\x02Follow\x02newest\x02oldest\x02Recent public links added to %[1]s on " +
-	"LinkTaco.com\x02Recent public links added to LinkTaco.com\x02Recent Link" +
-	"s\x02%[1]s Links\x02You have %[1]d restricted link(s) saved.\x02Upgrade " +
-	"the organization to activate them.\x02Link Detail\x02Public Post\x02Priv" +
-	"ate Post\x02Bookmark '%[1]s' on LinkTaco.com\x02bookmark, note, detail, " +
-	"popular, links, linktaco\x02Delete Bookmark\x02Something went wrong. Thi" +
-	"s bookmark could not be deleted.\x02Bookmark successfully deleted\x02Do " +
-	"you really whant to delete this bookmark?\x02Update Link\x02Do you want " +
-	"to delete\x02Link successfully updated.\x02QR Codes powered by Link Taco" +
-	"!\x02You will be redirected in 10 seconds.\x02QR Code Details\x02Downloa" +
-	"d Image\x02Delete QR Code\x02Something went wrong. The QR Code could not" +
-	" be deleted.\x02QR Code successfully deleted\x02Do you really whant to d" +
-	"elete this qr code\x02Export Data\x02File format\x02This feature is not " +
-	"allowed for free user. Please upgrade.\x02As system admin run this comma" +
-	"nd in the channel you want to connect\x02Disconnect\x02Connect\x02Connec" +
-	"ted\x02Import Data\x02Source\x02Click on Manage Bookmarks from the Bookm" +
-	"arks menu\x02A new window called Library will open\x02In the left sideba" +
-	"r select the folder you want to export. To export all bookmarks select A" +
-	"ll Bookmarks\x02Click on the icon that has two arrows (up and down) and " +
-	"choose 'Export Bookmarks to HTML'\x02Go to the File menu and chose Expor" +
-	"t\x02Select Export Bookmarks\x02Go to the Bookmarks menu and choose Book" +
-	"mark Manager\x02In the left sidebar select the folder that you want to e" +
-	"xport\x02In the top bookmark bar click on the three points at the top ri" +
-	"ght\x02Click on on Export Bookmarks\x02Go to https://pinboard.in/export/" +
-	" and click on JSON\x02Your importing into a free account / organization," +
-	" any private pinboard bookmarks will be marked restricted.\x02Upgrade yo" +
-	"ur account to support private bookmarks.\x02Instructions\x02Safari Bookm" +
-	"arks\x02Chrome Bookmarks\x02Firefox Bookmarks\x02Your bookmark import is" +
-	" being processed. We will notify you once it's complete.\x02Update Note" +
-	"\x02Note\x02Note '%[1]s' on LinkTaco.com\x02note, detail, popular, links" +
-	", linktaco\x02Create Note\x02An note was successfully created.\x02Error " +
-	"fetching referenced note: %[1]v\x02Store Dashboard\x02Tour\x02Recent\x02" +
-	"Popular\x02Categories\x02About\x02Log in\x02Log out\x02GQL Playground" +
-	"\x02Save Link\x02Save Note\x02Personal Tokens\x02Client Applications\x02" +
-	"Lists\x02Short Links\x02Admin\x02Help\x02Blog\x02Update Links\x02URL\x02" +
-	"Order\x02Delete List\x02Something went wrong. The link could not be dele" +
-	"ted.\x02Link successfully deleted\x02Do you really whant to delete this " +
-	"link\x02Create Links\x02Previous\x02No Links\x02Update List\x02Domain" +
-	"\x02Is Default\x02Delete Picture\x02Other\x02Other Name\x02Social Links" +
-	"\x02Listing successfully updated.\x02Create List\x02A list was successfu" +
-	"lly created.\x02Manage Links\x02No Lists\x02Creation Date\x02QR Codes" +
-	"\x02Invalid domain value given\x02List successfully deleted\x02Do you re" +
-	"ally whant to delete this list\x02Create QR Code\x02Create\x02Download" +
-	"\x02Custom background image\x02QR Code succesfully created\x02QR Code Li" +
-	"sting\x02View\x02No QR Codes\x02Disconnect Mattermost\x02Mattermost succ" +
-	"essfully disconnected\x02Do you really want to disconnect this organizat" +
-	"ion from mattermost\x02Connect Mattermost\x02This team is already tied t" +
-	"o an organization\x02Do you want to connect this organization to matterm" +
-	"ost?\x02This feature is restricted to free accounts. Please upgrade.\x02" +
-	"Organization linked successfully with mattermost\x02Sorry, free accounts" +
-	" do not support Mattermost Integration. Please upgrade to continue\x02Co" +
-	"nnect User\x02In order to interact with the mattermost you have to conne" +
-	"ct your account with your link user\x02Do you want to proceed?\x02User c" +
-	"onnected successfully\x02No slack connection found\x02We sent you a priv" +
-	"ate msg\x02The text to be searched is required\x02No links were found fo" +
-	"r %[1]s\x02No organization found\x02The title is required\x02The url is " +
-	"required\x02The code is required\x02The domain is required\x02Domain not" +
-	" found\x02A new short was created succesfully\x02Url is required\x02A ne" +
-	"w link was created succesfully\x02Please click in the following link to " +
-	"tie a org %[1]s\x02Installed successfully\x02something went wrong: %[1]s" +
-	"\x02done\x02Invalid organization given\x02No default organization found" +
-	"\x02Short Link\x02No Short Links\x02Create Short Link\x02Short Code\x02N" +
-	"o Domain\x02An short link was successfully created.\x02Update Short Link" +
-	"\x02Short link successfully updated.\x02Delete Short Link\x02Short Link " +
-	"successfully deleted\x02URL Shortening powered by Link Taco!\x02No URL a" +
-	"rgument was given\x02%[1]s: domain not found\x02Your short link was succ" +
-	"essfully created: %[1]s\x02Your link was successfully saved. Details her" +
-	"e: %[1]s\x02Link Search\x02Please link your slack user with link: %[1]s" +
-	"\x02We sent you a direct message with instructions\x02Add Link\x02Discon" +
-	"nect Slack\x02Slack successfully disconnected\x02Do you really want to d" +
-	"isconnect this organization from slack\x02Sorry, free accounts do not su" +
-	"pport Slack Integration. Please upgrade to continue\x02In order to inter" +
-	"act with Link Taco you have to connect you slack account with your link " +
-	"user\x02Something went wrong. The user could not be linked.\x02Connect t" +
-	"o Slack Workspace\x02Invalid slack response\x02Do you want to connect wi" +
-	"th slack?\x02Organization linked successfully with slack\x02Invalid emai" +
-	"l and/or password\x02New passwords do not match\x02User is not authentic" +
-	"ated\x02Current password given is incorrect\x02This field is required." +
-	"\x02Please enter a valid email address.\x02Please enter a valid phone nu" +
-	"mber.\x02Failed the '%[1]s' tag."
+	"%[1]s\x02Organization not found.\x02Tag not found.\x02New tag is require" +
+	"d.\x02newTag value is not valid.\x02Tag renamed successfully\x02Invalid " +
+	"orgType\x02Invalid visibility\x02Invalid level value.\x02Invalid status " +
+	"value.\x02A valid Organizaiton Slug is required.\x02Organization Slug is" +
+	" required for user level domains\x04\x00\x01 \x0b\x02Invalid ID\x02Domai" +
+	"n in use. Can not change service.\x02Name is required.\x02Email is requi" +
+	"red.\x02Register Invitation\x02Linktaco: Invitation to Register\x02You h" +
+	"ave been invited by %[1]s to join Link Taco\x02Please click the link bel" +
+	"ow:\x02You can not send both after and before cursors\x02Not Found\x02Ba" +
+	"seURL Not Found\x02Invalid tag cloud type without organization slug\x02O" +
+	"nly members with read perm are allowed to perform this action\x02Unable " +
+	"to find suitable organization\x02Only superusers can fetch system level " +
+	"domains\x02Link Short Not Found\x02Invalid code type\x02Org slug is requ" +
+	"ired for this kind of token\x02Access Restricted\x02Access denied.\x02In" +
+	"valid listing ID provided\x02Invalid listing for specified organization" +
+	"\x02GraphQL Playground\x02Submit Query\x02Back Home\x02Invalid origin so" +
+	"urce for importer.\x02The file is required\x02The file submitted for thi" +
+	"s source should be html\x02The file submitted for this source should be " +
+	"json\x02Personal Access Tokens\x02Comment\x02Issued\x02Expired\x02Revoke" +
+	"\x02You have not created any personal access tokens for your account." +
+	"\x02Authorized Clients\x02Client Name\x02Grants\x02You have not granted " +
+	"any third party clients access to your account.\x02Add Personal Access T" +
+	"oken\x02Note: Your access token <strong>will never be shown to you again" +
+	".</strong> Keep this secret. It will expire a year from now.\x02Revoke P" +
+	"ersonal Access Token\x02Do you want to revoke this personal access token" +
+	"? This can not be undone.\x02Yes, do it\x02No, nevermind\x02Successfully" +
+	" added personal access\x02Successfully revoked authorization token.\x02C" +
+	"lients\x02Client ID\x02Manage\x02Add\x02No Clients\x02Add OAuth2 Client" +
+	"\x02Client Description\x02Redirect URL\x02Client URL\x02Client Secret" +
+	"\x02Note: Your client secret will never be shown to you again.\x02OAuth " +
+	"2.0 client management\x02Revoke tokens & client secret\x02If OAuth 2.0 b" +
+	"earer tokens issued for your OAuth client, or your client secret, have b" +
+	"een disclosed to a third-party, you must revoke all tokens and have repl" +
+	"acements issued.\x02Revoke client tokens\x02Unregister this OAuth client" +
+	"\x02This will permanently unregister your OAuth 2.0 client\x02revoke all" +
+	" tokens issued to it, and prohibit the issuance of new tokens.\x02Unregi" +
+	"ster\x02Description\x02Informative URL\x02OAuth 2.0 client registered" +
+	"\x02Successfully added client\x02Successfully revoked client.\x02Success" +
+	"fully reissued client.\x02Authorize\x02would like to access to your Link" +
+	" Taco account.\x02is a third-party application operated by\x02You may re" +
+	"voke this access at any time on the OAuth tab of your account profile." +
+	"\x02Scopes\x02Approve\x02Reject\x02LinkTaco - Your bookmark import is co" +
+	"mplete\x02Hi there,\x02Just wanted to let you know that your bookmark im" +
+	"port has completed successfully!\x02- LinkTaco Team\x02Inactive Domain" +
+	"\x02The %[1]s domain is currently inactive\x02Please upgrade your accoun" +
+	"t to reactivate it\x02Pricing\x02Every account can create unlimited orga" +
+	"nizations. Each organization has it's own bookmarks, listings, analytics" +
+	", etc. All of the features below belong to each organization with their " +
+	"own unique URL's, groupings, and so on.\x02Feature\x02Free\x02Personal" +
+	"\x02Business\x02Price\x02per year\x02per month\x02months\x02Unlimited" +
+	"\x02Public only\x02Try It FREE\x02Bookmarks\x02Save public/private links" +
+	"\x02Save public/private notes\x02Follow other organizations (social)\x02" +
+	"Organize by tags\x02Advanced filtering/search\x02Full RSS feeds\x02Custo" +
+	"m domain + SSL\x02Link Listings\x02Create link listings (ie, social medi" +
+	"a bios, etc.)\x02Organize listings by tag\x02Filter/Search listings\x02U" +
+	"nlimited QR codes per listing\x02Full Analytics\x02Listing\x02Link Short" +
+	"ening\x02Unlimited short links\x02Organize shorts by tags\x02Filter/Sear" +
+	"ch shorts\x02Unlimited QR codes per short\x02Full analytics history\x02Q" +
+	"R Code specific analytics\x02Click analytics\x02Referer analyitcs\x02Cou" +
+	"ntry analytics\x02City analytics\x02Device analytics\x02Collaboration / " +
+	"Integrations\x02Add unlimited members to organization\x02Slack Integrati" +
+	"on\x02MatterMost Integration\x02Build Your Own Integration\x02Import / E" +
+	"xport\x02Import from Pinboard\x02Import from Firefox\x02Import from Chro" +
+	"me\x02Import from Safari\x02Export in JSON or HTML\x02API Powered\x02Ful" +
+	"l GraphQL API Access\x02OAuth2 Support\x02Self Hosting\x02Fully open sou" +
+	"rce\x02Host your own version of Link Taco\x02Documentation\x02Pricing an" +
+	"d feature details for LinkTaco.com\x02pricing, links, linktaco, feature," +
+	" plans, pricing plans\x02Welcome to LinkTaco!\x02Here you can mix all yo" +
+	"ur link saving and sharing needs in one tight little bundle. Much like a" +
+	" taco. A link taco if you will.\x02LinkTaco is an open source platform w" +
+	"here you can host all of your links. Custom domains, QR codes, Analytics" +
+	", full API, multiple organizations w/unlimited members are just some of " +
+	"what's included.\x02Social bookmarking is not new, it's just been forgot" +
+	"ten. Link shortening with analytics has been around forever. Link listin" +
+	"gs became cool once social media started allowing us to post a link to o" +
+	"ur websites in our profiles.\x02Up until now, all of these things were h" +
+	"osted on different services.\x02Social bookmarking: Pinboard (Delicious)" +
+	"\x02Link shortening: Bitly et al\x02Link listings: Linktree et al\x02Pea" +
+	"ce Pinboard. Bye Bitly. Later Linktree. Hello LinkTaco!\x02Since we're a" +
+	"\x02100% open source project\x04\x01 \x00R\x02you can host your own inst" +
+	"ance if you'd like full control over your own platform.\x02See the insta" +
+	"llation documentation for more.\x02Ready to get started? It's free to ma" +
+	"ke an account and use it forever (with some limitations). To use all fea" +
+	"tures you have to pay just a few bucks a year, or a few per month if you" +
+	"'re a business, and that's it. Simple!\x02Explore Features\x02Organize B" +
+	"ookmarks\x02Link Lists\x02Collaboration\x02Integrations\x02Import Export" +
+	"\x02Unlimited link listings (for social media bios, etc.)\x02Members can" +
+	" add/edit/remove links (if allowed)\x02Members have access based on perm" +
+	"issions granted\x02Browser bookmark widget\x02Domain List\x02Delete\x02L" +
+	"ookup Name\x02Service\x02for\x02Link Shortner\x02No Domains\x02Create Do" +
+	"main\x02Migrate Short Links\x02Old links won't work. All code will be mo" +
+	"ved to the new domain.\x02Domain created successfully\x02Delete Domain" +
+	"\x02%[1]s\x02Domain successfully deleted\x02Yes\x02Do you really whant t" +
+	"o delete this domain\x02Your Organizations\x02Open Source\x02Sponsored" +
+	"\x02Paid\x02Enabled\x02Disabled\x02Manage Subscription\x02Domains\x02Man" +
+	"age Members\x02Export\x02Import\x02Payment History\x02Create Organizatio" +
+	"n\x02Org Username\x02Default Bookmark Visibility\x02Sorry, you have exce" +
+	"eded the amount of free accounts available. Please update your current f" +
+	"ree account to create one more\x02Public\x02Private\x02Organization crea" +
+	"ted successfully\x02Update Organization\x02Is Enabled\x02Organization up" +
+	"dated successfully\x02Add Member\x02Permission\x02Please upgrade to a Bu" +
+	"siness organization to add members\x02Read\x02Write\x02Admin Write\x02An" +
+	" invitation was sent to this user\x02Something went wrong, impossible to" +
+	" send invitation\x02Delete Org Member\x02Something went wrong. This memb" +
+	"er could not be deleted: %[1]s\x02Member successfully deleted\x02Delete " +
+	"member %[1]s (%[2]s) from Organization %[3]s?\x02Member added succesxful" +
+	"ly\x02Something went wrong. Impossible to get the member data\x02Member " +
+	"List\x02No members\x02Create Link\x02Title\x02Visibility\x02Unread\x02St" +
+	"arred\x02Tags\x02Use commas to separate your tags. Example: tag 1, tag 2" +
+	", tag 3\x02Archive URL\x02bookmarklet\x02You can also submit via the\x02" +
+	"A link was successfully created.\x02Error fetching referenced url: Not f" +
+	"ound\x02Error fetching referenced link: %[1]v\x02bookmark\x02Popular Boo" +
+	"kmarks\x02This ain't a popularity contest or anything but this is weird " +
+	"that there are no links!\x02Most popular links on LinkTaco.com\x02popula" +
+	"r, links, linktaco, feature, plans, pricing plans\x02Popular Links\x02Fo" +
+	"llowing\x02Unfollow\x02No organizations\x02Feed\x02By\x02Search\x02Your " +
+	"feed is empty :( Go follow some people. Try the Popular or Recent feeds " +
+	"to find some interesting people to follow.\x02Advanced Search\x02Include" +
+	" Tags\x02Exclude Tags\x02Clear\x02Followings\x02Saved Bookmarks\x02This " +
+	"feed has no links. Booo!\x02Recent bookmarks for URL %[1]s added on Link" +
+	"Taco.com\x02recent, public, links, linktaco\x02saved\x02Recent Bookmarks" +
+	"\x02All\x02Untagged\x02Mark as read\x02Mark as unread\x02Star\x02Unstar" +
+	"\x02Archive\x02Follow\x02newest\x02oldest\x02Recent public links added t" +
+	"o %[1]s on LinkTaco.com\x02Recent public links added to LinkTaco.com\x02" +
+	"Recent Links\x02%[1]s Links\x02You have %[1]d restricted link(s) saved." +
+	"\x02Upgrade the organization to activate them.\x02Link Detail\x02Public " +
+	"Post\x02Private Post\x02Bookmark '%[1]s' on LinkTaco.com\x02bookmark, no" +
+	"te, detail, popular, links, linktaco\x02Delete Bookmark\x02Something wen" +
+	"t wrong. This bookmark could not be deleted.\x02Bookmark successfully de" +
+	"leted\x02Do you really whant to delete this bookmark?\x02Update Link\x02" +
+	"Do you want to delete\x02Link successfully updated.\x02QR Codes powered " +
+	"by Link Taco!\x02You will be redirected in 10 seconds.\x02QR Code Detail" +
+	"s\x02Download Image\x02Delete QR Code\x02Something went wrong. The QR Co" +
+	"de could not be deleted.\x02QR Code successfully deleted\x02Do you reall" +
+	"y whant to delete this qr code\x02Export Data\x02File format\x02This fea" +
+	"ture is not allowed for free user. Please upgrade.\x02As system admin ru" +
+	"n this command in the channel you want to connect\x02Disconnect\x02Conne" +
+	"ct\x02Connected\x02Import Data\x02Source\x02Click on Manage Bookmarks fr" +
+	"om the Bookmarks menu\x02A new window called Library will open\x02In the" +
+	" left sidebar select the folder you want to export. To export all bookma" +
+	"rks select All Bookmarks\x02Click on the icon that has two arrows (up an" +
+	"d down) and choose 'Export Bookmarks to HTML'\x02Go to the File menu and" +
+	" chose Export\x02Select Export Bookmarks\x02Go to the Bookmarks menu and" +
+	" choose Bookmark Manager\x02In the left sidebar select the folder that y" +
+	"ou want to export\x02In the top bookmark bar click on the three points a" +
+	"t the top right\x02Click on on Export Bookmarks\x02Go to https://pinboar" +
+	"d.in/export/ and click on JSON\x02Your importing into a free account / o" +
+	"rganization, any private pinboard bookmarks will be marked restricted." +
+	"\x02Upgrade your account to support private bookmarks.\x02Instructions" +
+	"\x02Safari Bookmarks\x02Chrome Bookmarks\x02Firefox Bookmarks\x02Your bo" +
+	"okmark import is being processed. We will notify you once it's complete." +
+	"\x02Update Note\x02Note\x02Note '%[1]s' on LinkTaco.com\x02note, detail," +
+	" popular, links, linktaco\x02Create Note\x02An note was successfully cre" +
+	"ated.\x02Error fetching referenced note: %[1]v\x02Store Dashboard\x02Tou" +
+	"r\x02Recent\x02Popular\x02Categories\x02About\x02Log in\x02Log out\x02GQ" +
+	"L Playground\x02Save Link\x02Save Note\x02Personal Tokens\x02Client Appl" +
+	"ications\x02Lists\x02Short Links\x02Admin\x02Help\x02Blog\x02Update Link" +
+	"s\x02URL\x02Order\x02Delete List\x02Something went wrong. The link could" +
+	" not be deleted.\x02Link successfully deleted\x02Do you really whant to " +
+	"delete this link\x02Create Links\x02Previous\x02No Links\x02Update List" +
+	"\x02Domain\x02Is Default\x02Delete Picture\x02Other\x02Other Name\x02Soc" +
+	"ial Links\x02Listing successfully updated.\x02Create List\x02A list was " +
+	"successfully created.\x02Manage Links\x02No Lists\x02Creation Date\x02QR" +
+	" Codes\x02Invalid domain value given\x02List successfully deleted\x02Do " +
+	"you really whant to delete this list\x02Create QR Code\x02Create\x02Down" +
+	"load\x02Custom background image\x02QR Code succesfully created\x02QR Cod" +
+	"e Listing\x02View\x02No QR Codes\x02Disconnect Mattermost\x02Mattermost " +
+	"successfully disconnected\x02Do you really want to disconnect this organ" +
+	"ization from mattermost\x02Connect Mattermost\x02This team is already ti" +
+	"ed to an organization\x02Do you want to connect this organization to mat" +
+	"termost?\x02This feature is restricted to free accounts. Please upgrade." +
+	"\x02Organization linked successfully with mattermost\x02Sorry, free acco" +
+	"unts do not support Mattermost Integration. Please upgrade to continue" +
+	"\x02Connect User\x02In order to interact with the mattermost you have to" +
+	" connect your account with your link user\x02Do you want to proceed?\x02" +
+	"User connected successfully\x02No slack connection found\x02We sent you " +
+	"a private msg\x02The text to be searched is required\x02No links were fo" +
+	"und for %[1]s\x02No organization found\x02The title is required\x02The u" +
+	"rl is required\x02The code is required\x02The domain is required\x02Doma" +
+	"in not found\x02A new short was created succesfully\x02Url is required" +
+	"\x02A new link was created succesfully\x02Please click in the following " +
+	"link to tie a org %[1]s\x02Installed successfully\x02something went wron" +
+	"g: %[1]s\x02done\x02Invalid organization given\x02No default organizatio" +
+	"n found\x02Short Link\x02No Short Links\x02Create Short Link\x02Short Co" +
+	"de\x02No Domain\x02An short link was successfully created.\x02Update Sho" +
+	"rt Link\x02Short link successfully updated.\x02Delete Short Link\x02Shor" +
+	"t Link successfully deleted\x02URL Shortening powered by Link Taco!\x02N" +
+	"o URL argument was given\x02%[1]s: domain not found\x02Your short link w" +
+	"as successfully created: %[1]s\x02Your link was successfully saved. Deta" +
+	"ils here: %[1]s\x02Link Search\x02Please link your slack user with link:" +
+	" %[1]s\x02We sent you a direct message with instructions\x02Add Link\x02" +
+	"Disconnect Slack\x02Slack successfully disconnected\x02Do you really wan" +
+	"t to disconnect this organization from slack\x02Sorry, free accounts do " +
+	"not support Slack Integration. Please upgrade to continue\x02In order to" +
+	" interact with Link Taco you have to connect you slack account with your" +
+	" link user\x02Something went wrong. The user could not be linked.\x02Con" +
+	"nect to Slack Workspace\x02Invalid slack response\x02Do you want to conn" +
+	"ect with slack?\x02Organization linked successfully with slack\x02Invali" +
+	"d email and/or password\x02New passwords do not match\x02User is not aut" +
+	"henticated\x02Current password given is incorrect\x02This field is requi" +
+	"red.\x02Please enter a valid email address.\x02Please enter a valid phon" +
+	"e number.\x02Failed the '%[1]s' tag."
 
-var esIndex = []uint32{ // 709 elements
+var esIndex = []uint32{ // 713 elements
 	// Entry 0 - 1F
 	0x00000000, 0x00000014, 0x0000006a, 0x00000089,
 	0x000000e0, 0x00000199, 0x00000233, 0x000002a4,
@@ -1351,140 +1357,141 @@ var esIndex = []uint32{ // 709 elements
 	0x00002570, 0x0000258d, 0x000025a2, 0x000025bb,
 	0x000025d5, 0x000025e9, 0x00002619, 0x00002632,
 	0x00002663, 0x0000267c, 0x00002695, 0x000026c0,
-	0x000026dc, 0x000026ee, 0x00002705, 0x0000271e,
-	0x00002738, 0x00002766, 0x000027ab, 0x000027bd,
+	0x000026dc, 0x000026f9, 0x00002711, 0x0000272d,
+	0x0000274f, 0x00002770, 0x00002782, 0x00002799,
 	// Entry 100 - 11F
-	0x000027f7, 0x0000280b, 0x0000281e, 0x00002836,
-	0x00002858, 0x0000288c, 0x000028b4, 0x000028e7,
-	0x000028f5, 0x0000290b, 0x00002958, 0x0000299e,
-	0x000029c8, 0x00002a0b, 0x00002a24, 0x00002a3e,
-	0x00002a7c, 0x00002a8f, 0x00002aa0, 0x00002abd,
-	0x00002ae4, 0x00002b1a, 0x00002b35, 0x00002b46,
-	0x00002b58, 0x00002b87, 0x00002b9f, 0x00002bd7,
-	0x00002c0b, 0x00002c25, 0x00002c30, 0x00002c37,
+	0x000027b2, 0x000027cc, 0x000027fa, 0x0000283f,
+	0x00002851, 0x0000288b, 0x0000289f, 0x000028b2,
+	0x000028ca, 0x000028ec, 0x00002920, 0x00002948,
+	0x0000297b, 0x00002989, 0x0000299f, 0x000029ec,
+	0x00002a32, 0x00002a5c, 0x00002a9f, 0x00002ab8,
+	0x00002ad2, 0x00002b10, 0x00002b23, 0x00002b34,
+	0x00002b5b, 0x00002b91, 0x00002bac, 0x00002bbd,
+	0x00002bcf, 0x00002bfe, 0x00002c16, 0x00002c4e,
 	// Entry 120 - 13F
-	0x00002c40, 0x00002c48, 0x00002c86, 0x00002c9b,
-	0x00002cad, 0x00002cb5, 0x00002cfc, 0x00002d1d,
-	0x00002d9a, 0x00002dbb, 0x00002e0d, 0x00002e17,
-	0x00002e1a, 0x00002e3e, 0x00002e69, 0x00002e72,
-	0x00002e80, 0x00002e88, 0x00002e90, 0x00002e9d,
-	0x00002eb4, 0x00002ecc, 0x00002ee6, 0x00002ef5,
-	0x00002f04, 0x00002f3c, 0x00002f5a, 0x00002f7b,
-	0x0000303c, 0x00003056, 0x00003075, 0x000030b2,
+	0x00002c82, 0x00002c9c, 0x00002ca7, 0x00002cae,
+	0x00002cb7, 0x00002cbf, 0x00002cfd, 0x00002d12,
+	0x00002d24, 0x00002d2c, 0x00002d73, 0x00002d94,
+	0x00002e11, 0x00002e32, 0x00002e84, 0x00002e8e,
+	0x00002e91, 0x00002eb5, 0x00002ee0, 0x00002ee9,
+	0x00002ef7, 0x00002eff, 0x00002f07, 0x00002f14,
+	0x00002f2b, 0x00002f43, 0x00002f5d, 0x00002f6c,
+	0x00002f7b, 0x00002fb3, 0x00002fd1, 0x00002ff2,
 	// Entry 140 - 15F
-	0x000030fe, 0x0000310b, 0x00003118, 0x00003128,
-	0x00003148, 0x00003164, 0x00003180, 0x0000319c,
-	0x000031a6, 0x000031d1, 0x000031fd, 0x0000324d,
-	0x00003255, 0x0000325d, 0x00003266, 0x000032a3,
-	0x000032a9, 0x00003307, 0x0000331c, 0x0000332d,
-	0x0000335c, 0x0000339f, 0x000033a7, 0x000034a3,
-	0x000034b1, 0x000034b8, 0x000034c1, 0x000034c9,
-	0x000034d0, 0x000034d9, 0x000034e1, 0x000034e7,
+	0x000030b3, 0x000030cd, 0x000030ec, 0x00003129,
+	0x00003175, 0x00003182, 0x0000318f, 0x0000319f,
+	0x000031bf, 0x000031db, 0x000031f7, 0x00003213,
+	0x0000321d, 0x00003248, 0x00003274, 0x000032c4,
+	0x000032cc, 0x000032d4, 0x000032dd, 0x0000331a,
+	0x00003320, 0x0000337e, 0x00003393, 0x000033a4,
+	0x000033d3, 0x00003416, 0x0000341e, 0x0000351a,
+	0x00003528, 0x0000352f, 0x00003538, 0x00003540,
 	// Entry 160 - 17F
-	0x000034f1, 0x000034ff, 0x00003510, 0x0000351b,
-	0x0000353e, 0x0000355f, 0x00003584, 0x0000359c,
-	0x000035b9, 0x000035cf, 0x000035eb, 0x000035ff,
-	0x0000364c, 0x0000366d, 0x00003685, 0x000036a8,
-	0x000036bb, 0x000036c3, 0x000036db, 0x000036f5,
-	0x0000371c, 0x0000373a, 0x00003762, 0x00003782,
-	0x000037a8, 0x000037bb, 0x000037d2, 0x000037e6,
-	0x000037fb, 0x00003815, 0x00003833, 0x00003862,
+	0x00003547, 0x00003550, 0x00003558, 0x0000355e,
+	0x00003568, 0x00003576, 0x00003587, 0x00003592,
+	0x000035b5, 0x000035d6, 0x000035fb, 0x00003613,
+	0x00003630, 0x00003646, 0x00003662, 0x00003676,
+	0x000036c3, 0x000036e4, 0x000036fc, 0x0000371f,
+	0x00003732, 0x0000373a, 0x00003752, 0x0000376c,
+	0x00003793, 0x000037b1, 0x000037d9, 0x000037f9,
+	0x0000381f, 0x00003832, 0x00003849, 0x0000385d,
 	// Entry 180 - 19F
-	0x00003879, 0x00003895, 0x000038b6, 0x000038ca,
-	0x000038e2, 0x000038f9, 0x0000390f, 0x00003925,
-	0x0000393d, 0x0000394f, 0x00003970, 0x0000397f,
-	0x00003992, 0x000039b0, 0x000039d8, 0x000039e7,
-	0x00003a20, 0x00003a68, 0x00003a81, 0x00003b1d,
-	0x00003c17, 0x00003d33, 0x00003d77, 0x00003da1,
-	0x00003dc8, 0x00003dee, 0x00003e2f, 0x00003e3d,
-	0x00003e5e, 0x00003ebf, 0x00003f02, 0x00003ffa,
+	0x00003872, 0x0000388c, 0x000038aa, 0x000038d9,
+	0x000038f0, 0x0000390c, 0x0000392d, 0x00003941,
+	0x00003959, 0x00003970, 0x00003986, 0x0000399c,
+	0x000039b4, 0x000039c6, 0x000039e7, 0x000039f6,
+	0x00003a09, 0x00003a27, 0x00003a4f, 0x00003a5e,
+	0x00003a97, 0x00003adf, 0x00003af8, 0x00003b94,
+	0x00003c8e, 0x00003daa, 0x00003dee, 0x00003e18,
+	0x00003e3f, 0x00003e65, 0x00003ea6, 0x00003eb4,
 	// Entry 1A0 - 1BF
-	0x0000400e, 0x00004023, 0x00004032, 0x00004040,
-	0x0000404e, 0x00004060, 0x000040aa, 0x000040ee,
-	0x00004127, 0x0000414a, 0x0000415b, 0x00004164,
-	0x00004178, 0x00004181, 0x00004186, 0x00004192,
-	0x0000419f, 0x000041ad, 0x000041c1, 0x00004218,
-	0x00004232, 0x00004243, 0x00004249, 0x00004265,
-	0x00004268, 0x00004284, 0x00004297, 0x000042a7,
-	0x000042b3, 0x000042ba, 0x000042c3, 0x000042cf,
+	0x00003ed5, 0x00003f36, 0x00003f79, 0x00004071,
+	0x00004085, 0x0000409a, 0x000040a9, 0x000040b7,
+	0x000040c5, 0x000040d7, 0x00004121, 0x00004165,
+	0x0000419e, 0x000041c1, 0x000041d2, 0x000041db,
+	0x000041ef, 0x000041f8, 0x000041fd, 0x00004209,
+	0x00004216, 0x00004224, 0x00004238, 0x0000428f,
+	0x000042a9, 0x000042ba, 0x000042c0, 0x000042dc,
+	0x000042df, 0x000042fb, 0x0000430e, 0x0000431e,
 	// Entry 1C0 - 1DF
-	0x000042e5, 0x000042ee, 0x000042ff, 0x00004308,
-	0x00004311, 0x00004324, 0x00004338, 0x0000435b,
-	0x00004384, 0x00004403, 0x0000440c, 0x00004414,
-	0x00004434, 0x0000444d, 0x0000445e, 0x00004483,
-	0x00004493, 0x0000449b, 0x000044d9, 0x000044de,
-	0x000044e7, 0x00004502, 0x0000452d, 0x0000455b,
-	0x00004580, 0x000045bb, 0x000045d8, 0x00004617,
-	0x00004633, 0x0000466c, 0x0000467e, 0x0000468b,
+	0x0000432a, 0x00004331, 0x0000433a, 0x00004346,
+	0x0000435c, 0x00004365, 0x00004376, 0x0000437f,
+	0x00004388, 0x0000439b, 0x000043af, 0x000043d2,
+	0x000043fb, 0x0000447a, 0x00004483, 0x0000448b,
+	0x000044ab, 0x000044c4, 0x000044d5, 0x000044fa,
+	0x0000450a, 0x00004512, 0x00004550, 0x00004555,
+	0x0000455e, 0x00004579, 0x000045a4, 0x000045d2,
+	0x000045f7, 0x00004632, 0x0000464f, 0x0000468e,
 	// Entry 1E0 - 1FF
-	0x00004698, 0x000046a0, 0x000046ac, 0x000046b5,
-	0x000046bf, 0x000046c9, 0x0000471b, 0x0000472a,
-	0x00004733, 0x00004758, 0x00004776, 0x000047a6,
-	0x000047cd, 0x000047d6, 0x000047eb, 0x00004843,
-	0x0000486a, 0x000048b4, 0x000048c4, 0x000048ce,
-	0x000048de, 0x000048f1, 0x000048f6, 0x000048fa,
-	0x00004901, 0x00004985, 0x00004998, 0x000049a5,
-	0x000049b2, 0x000049ba, 0x000049c4, 0x000049d9,
+	0x000046aa, 0x000046e3, 0x000046f5, 0x00004702,
+	0x0000470f, 0x00004717, 0x00004723, 0x0000472c,
+	0x00004736, 0x00004740, 0x00004792, 0x000047a1,
+	0x000047aa, 0x000047cf, 0x000047ed, 0x0000481d,
+	0x00004844, 0x0000484d, 0x00004862, 0x000048ba,
+	0x000048e1, 0x0000492b, 0x0000493b, 0x00004945,
+	0x00004955, 0x00004968, 0x0000496d, 0x00004971,
+	0x00004978, 0x000049fc, 0x00004a0f, 0x00004a1c,
 	// Entry 200 - 21F
-	0x000049fd, 0x00004a3e, 0x00004a66, 0x00004a6f,
-	0x00004a84, 0x00004a8a, 0x00004a98, 0x00004aab,
-	0x00004ac1, 0x00004aca, 0x00004ad6, 0x00004adf,
-	0x00004ae6, 0x00004af1, 0x00004afc, 0x00004b3a,
-	0x00004b6f, 0x00004b7f, 0x00004b8d, 0x00004bb9,
-	0x00004be5, 0x00004bf7, 0x00004c0d, 0x00004c23,
-	0x00004c44, 0x00004c78, 0x00004c88, 0x00004cbc,
-	0x00004cda, 0x00004d05, 0x00004d17, 0x00004d26,
+	0x00004a29, 0x00004a31, 0x00004a3b, 0x00004a50,
+	0x00004a74, 0x00004ab5, 0x00004add, 0x00004ae6,
+	0x00004afb, 0x00004b01, 0x00004b0f, 0x00004b22,
+	0x00004b38, 0x00004b41, 0x00004b4d, 0x00004b56,
+	0x00004b5d, 0x00004b68, 0x00004b73, 0x00004bb1,
+	0x00004be6, 0x00004bf6, 0x00004c04, 0x00004c30,
+	0x00004c5c, 0x00004c6e, 0x00004c84, 0x00004c9a,
+	0x00004cbb, 0x00004cef, 0x00004cff, 0x00004d33,
 	// Entry 220 - 23F
-	0x00004d42, 0x00004d5c, 0x00004d82, 0x00004d99,
-	0x00004da7, 0x00004dba, 0x00004df0, 0x00004e0f,
-	0x00004e2e, 0x00004e3d, 0x00004e50, 0x00004e9f,
-	0x00004ef9, 0x00004f05, 0x00004f0e, 0x00004f18,
-	0x00004f27, 0x00004f2e, 0x00004f67, 0x00004f97,
-	0x00005023, 0x0000507b, 0x000050a7, 0x000050c5,
-	0x000050fb, 0x00005145, 0x00005196, 0x000051b3,
-	0x000051e9, 0x00005264, 0x0000529a, 0x000052a8,
+	0x00004d51, 0x00004d7c, 0x00004d8e, 0x00004d9d,
+	0x00004db9, 0x00004dd3, 0x00004df9, 0x00004e10,
+	0x00004e1e, 0x00004e31, 0x00004e67, 0x00004e86,
+	0x00004ea5, 0x00004eb4, 0x00004ec7, 0x00004f16,
+	0x00004f70, 0x00004f7c, 0x00004f85, 0x00004f8f,
+	0x00004f9e, 0x00004fa5, 0x00004fde, 0x0000500e,
+	0x0000509a, 0x000050f2, 0x0000511e, 0x0000513c,
+	0x00005172, 0x000051bc, 0x0000520d, 0x0000522a,
 	// Entry 240 - 25F
-	0x000052bd, 0x000052d2, 0x000052e8, 0x00005341,
-	0x00005351, 0x00005356, 0x00005373, 0x0000539d,
-	0x000053a8, 0x000053c7, 0x000053f1, 0x000053f9,
-	0x000053fe, 0x00005407, 0x0000540f, 0x0000541b,
-	0x00005421, 0x00005431, 0x00005440, 0x00005457,
-	0x00005466, 0x00005472, 0x00005483, 0x00005499,
-	0x000054a0, 0x000054ad, 0x000054b9, 0x000054bf,
-	0x000054c4, 0x000054d5, 0x000054d9, 0x000054df,
+	0x00005260, 0x000052db, 0x00005311, 0x0000531f,
+	0x00005334, 0x00005349, 0x0000535f, 0x000053b8,
+	0x000053c8, 0x000053cd, 0x000053ea, 0x00005414,
+	0x0000541f, 0x0000543e, 0x00005468, 0x00005470,
+	0x00005475, 0x0000547e, 0x00005486, 0x00005492,
+	0x00005498, 0x000054a8, 0x000054b7, 0x000054ce,
+	0x000054dd, 0x000054e9, 0x000054fa, 0x00005510,
+	0x00005517, 0x00005524, 0x00005530, 0x00005536,
 	// Entry 260 - 27F
-	0x000054ee, 0x0000551f, 0x00005538, 0x00005551,
-	0x0000555d, 0x00005566, 0x00005570, 0x00005581,
-	0x00005589, 0x00005598, 0x000055a6, 0x000055ab,
-	0x000055b7, 0x000055c6, 0x000055de, 0x000055ea,
-	0x0000560a, 0x00005618, 0x00005623, 0x00005636,
-	0x00005642, 0x0000565d, 0x00005678, 0x000056a1,
-	0x000056b2, 0x000056b8, 0x000056c2, 0x000056e2,
-	0x000056ff, 0x00005713, 0x00005717, 0x0000572a,
+	0x0000553b, 0x0000554c, 0x00005550, 0x00005556,
+	0x00005565, 0x00005596, 0x000055af, 0x000055c8,
+	0x000055d4, 0x000055dd, 0x000055e7, 0x000055f8,
+	0x00005600, 0x0000560f, 0x0000561d, 0x00005622,
+	0x0000562e, 0x0000563d, 0x00005655, 0x00005661,
+	0x00005681, 0x0000568f, 0x0000569a, 0x000056ad,
+	0x000056b9, 0x000056d4, 0x000056ef, 0x00005718,
+	0x00005729, 0x0000572f, 0x00005739, 0x00005759,
 	// Entry 280 - 29F
-	0x00005741, 0x00005764, 0x000057a1, 0x000057ba,
-	0x000057f4, 0x00005829, 0x00005872, 0x0000589c,
-	0x000058ff, 0x00005910, 0x0000596a, 0x0000597c,
-	0x00005999, 0x000059bc, 0x000059db, 0x000059ff,
-	0x00005a23, 0x00005a3f, 0x00005a57, 0x00005a6b,
-	0x00005a83, 0x00005a9b, 0x00005ab1, 0x00005ad5,
-	0x00005ae6, 0x00005b0c, 0x00005b5b, 0x00005b71,
-	0x00005b88, 0x00005b8e, 0x00005bb4, 0x00005be1,
+	0x00005776, 0x0000578a, 0x0000578e, 0x000057a1,
+	0x000057b8, 0x000057db, 0x00005818, 0x00005831,
+	0x0000586b, 0x000058a0, 0x000058e9, 0x00005913,
+	0x00005976, 0x00005987, 0x000059e1, 0x000059f3,
+	0x00005a10, 0x00005a33, 0x00005a52, 0x00005a76,
+	0x00005a9a, 0x00005ab6, 0x00005ace, 0x00005ae2,
+	0x00005afa, 0x00005b12, 0x00005b28, 0x00005b4c,
+	0x00005b5d, 0x00005b83, 0x00005bd2, 0x00005be8,
 	// Entry 2A0 - 2BF
-	0x00005bec, 0x00005bfd, 0x00005c0e, 0x00005c1c,
-	0x00005c28, 0x00005c4c, 0x00005c62, 0x00005c84,
-	0x00005c98, 0x00005cb8, 0x00005cd4, 0x00005cfb,
-	0x00005d18, 0x00005d45, 0x00005d7e, 0x00005d8a,
-	0x00005dc3, 0x00005df4, 0x00005e01, 0x00005e16,
-	0x00005e38, 0x00005e66, 0x00005edd, 0x00005f3f,
-	0x00005f73, 0x00005f8e, 0x00005fab, 0x00005fc8,
-	0x00005ff5, 0x00006012, 0x00006037, 0x00006057,
+	0x00005bff, 0x00005c05, 0x00005c2b, 0x00005c58,
+	0x00005c63, 0x00005c74, 0x00005c85, 0x00005c93,
+	0x00005c9f, 0x00005cc3, 0x00005cd9, 0x00005cfb,
+	0x00005d0f, 0x00005d2f, 0x00005d4b, 0x00005d72,
+	0x00005d8f, 0x00005dbc, 0x00005df5, 0x00005e01,
+	0x00005e3a, 0x00005e6b, 0x00005e78, 0x00005e8d,
+	0x00005eaf, 0x00005edd, 0x00005f54, 0x00005fb6,
+	0x00005fea, 0x00006005, 0x00006022, 0x0000603f,
 	// Entry 2C0 - 2DF
-	0x0000607b, 0x00006093, 0x000060ba, 0x000060e2,
-	0x000060f5,
-} // Size: 2860 bytes
+	0x0000606c, 0x00006089, 0x000060ae, 0x000060ce,
+	0x000060f2, 0x0000610a, 0x00006131, 0x00006159,
+	0x0000616c,
+} // Size: 2876 bytes
 
-const esData string = "" + // Size: 24821 bytes
+const esData string = "" + // Size: 24940 bytes
 	"\x02Página Restringida\x02Esta función solo está permitida para usuarios" +
 	" de pago. Por favor actualice su plan\x02Continuar para actualizar plan" +
 	"\x02Marcadores sociales más compartir enlaces, acortar y listar, todo en" +
@@ -1630,229 +1637,231 @@ const esData string = "" + // Size: 24821 bytes
 	"o\x02Lista No Encontrado\x02No puedes crear más de 5 códigos qr por list" +
 	"a\x02Link Corto No Encontrado\x02No puedes crear más de 5 código qr por " +
 	"dominio\x02Código QR No Encontrado\x02El usuario sigue a %[1]s\x02Este u" +
-	"suario no sigue a esta organización\x02El usuario no sigue a %[1]s\x02or" +
-	"gType Inválido\x02Visibilidad no válida\x02Valor de nivel inválido\x02Va" +
-	"lor de estado inválido\x02Un Slug válido de Organización es requerido" +
-	"\x02Slug de Organización es requerida para dominios de nivel de usuario" +
-	"\x04\x00\x01 \x0d\x02ID inválido\x02El dominio está en uso. No se puede " +
-	"cambiar el servicio.\x02Nombre es requerido\x02Email es requerido\x02Inv" +
-	"itación de Registro\x02Linktaco: Invitación de Registro\x02Has sido invi" +
-	"tado por %[1]s para unirse a Link Taco\x02Por favor de click en el sigui" +
-	"ente link\x02No es posible enviar ambos cursores after y before\x02No en" +
-	"contrado\x02BaseURL no encontrada\x02Tipo de nube de etiquetas inválido " +
-	"sin el identificador de la organización\x02Solo los miembros con permiso" +
-	" de lectura pueden realizar esta acción\x02No fue posible una organizaci" +
-	"ón adecuada\x02Solo los superusuarios pueden obtener dominios de nivel " +
-	"de sistema\x02Link Corto No Encontrado\x02Tipo de código inválido\x02El " +
-	"slug de organización es requerido para este tipo de token\x02Acceso Rest" +
-	"ringido\x02Acceso denegado.\x02Organización no encontrada.\x02ID de list" +
-	"ado inválido proporcionado.\x02Listado inválido para la organización esp" +
-	"ecificada.\x02Zona de pruebas de GraphQL\x02Envíar Consulta\x02Regresar " +
-	"a Inicio\x02Fuente de origen inválida para el importador.\x02El archivo " +
-	"es requerido\x02El archivo subido para esta fuente debería de ser html" +
-	"\x02El archivo subido para esta fuente debe de ser json\x02Tokens de Acc" +
-	"eso Personal\x02Comentario\x02Creado\x02Expirado\x02Revocar\x02No has cr" +
-	"eado ningún token de acceso personal para tu cuenta\x02Clientes Autoriza" +
-	"dos\x02Nombre de Cliente\x02Permiso\x02No has autorizardo ningún client " +
-	"de tercero para acceder a tu cuenta.\x02Agregar Token de Acceso Personal" +
-	"\x02Nota: Tu token de acceso <strong>nunca se te volverá a mostrar.</str" +
-	"ong> Guárdalo en secreto. Expirará dentro de un año.\x02Revocar Token de" +
-	" Acceso Personal\x02¿Desea revokar este token de acceso persona? Esta ac" +
-	"ción no puede ser deshecha.\x02Si, hazlo\x02No\x02Acceso personal agrega" +
-	"da con éxito\x02Token de autorización revocado con éxito\x02Clientes\x02" +
-	"ID de Cliente\x02Manejar\x02Agregar\x02Sin Clientes\x02Agregar Cliente O" +
-	"Auth2\x02Descripción de Cliente\x02URL de redireccionamiento\x02URL de C" +
-	"liente\x02Client Secreto\x02Nota: Tu cliente secreto nunca será mostrado" +
-	" de nuevo.\x02Manejar clientes de OAuth 2.0\x02Revoca tokens de cliente " +
-	"secreto\x02Si los tokens de portador de OAuth 2.0 emitidos para tu clien" +
-	"te de OAuth o tu cliente secreto se han revelado a un tercero, debes rev" +
-	"ocar todos los tokens y solicitar que se emitan reemplazos.\x02Revocar c" +
-	"liente de tokens\x02Desregistrar este client OAuth\x02Esto registrará de" +
-	" manera permanente tu client de OAuth 2.0\x02revoca todos los tokens emi" +
-	"tidos, y prohíbie la emisión de nuevos tokens.\x02Desregistrar\x02Descri" +
-	"pción\x02URL informativa\x02Cliente de OAuth 2.0 registrado\x02Cliente a" +
-	"gregado con éxito\x02Cliente revocado con éxito\x02Cliente recreado con " +
-	"éxito\x02Autorizar\x02gustaría acceder a tu cuenta de Link Taco\x02es u" +
-	"na applicación de terceros operada por\x02Podrás revocar este acceso en " +
-	"cualquier momento en la tab OAtuh de tu perfíl.\x02Alcance\x02Aprobar" +
-	"\x02Rechazar\x02LinkTaco - La importación de tus marcadores está complet" +
-	"a.\x02Hola,\x02Solo queríamos informarte que la importación de tus marca" +
-	"dores se ha completado con éxito.\x02- Equipo de LinkTaco\x02Dominio Ina" +
-	"ctivo\x02El dominio %[1]s está actualmente desactivado\x02Por favor actu" +
-	"alice la subscripción de su cuenta para reactivarla\x02Precios\x02Cada c" +
-	"uenta puede crear organizaciones ilimitadas. Cada organización tiene sus" +
-	" propios marcadores, listados, análisis, etc. Todas las características " +
-	"a continuación pertenecen a cada organización con sus propias URL únicas" +
-	", agrupaciones, y más.\x02Funcionalidad\x02Gratis\x02Personal\x02Negocio" +
-	"\x02Precio\x02por año\x02por mes\x02meses\x02Ilimitado\x02Solo público" +
-	"\x02Pruébalo GRATIS\x02Marcadores\x02Guardar enlaces públicos/privados" +
-	"\x02Guardar notas públicas/privadas\x02Seguir otras organizaciones (soci" +
-	"al)\x02Organizar por etiquetas\x02Filtrado/ búsqueda avanzada\x02Fuentes" +
-	" RSS completas\x02Dominio personalizado + SSL\x02Listados de enlaces\x02" +
-	"Crear listados de enlaces (por ejemplo, biografías en redes sociales, et" +
-	"c.)\x02Organizar listados por etiquetas\x02Filtrar/Buscar listados\x02Có" +
-	"digos QR ilimitados por listado\x02Análisis completo\x02Listado\x02Acort" +
-	"amiento de enlaces\x02Enlaces cortos ilimitados\x02Organizar enlaces cor" +
-	"tos por etiquetas\x02Filtrar/Buscar enlaces cortos\x02Códigos QR ilimita" +
-	"dos por enlace corto\x02Historial completo de análisis\x02Análisis espec" +
-	"íficos de códigos QR\x02Análisis de clics\x02Análisis de referidos\x02A" +
-	"nálisis por país\x02Análisis por ciudad\x02Análisis de dispositivos\x02C" +
-	"olaboración / Integraciones\x02Agregar miembros ilimitados a la organiza" +
-	"ción\x02Integración con Slack\x02Integración con MatterMost\x02Construye" +
-	" tu propia integración\x02Importar / Exportar\x02Importar desde Pinboard" +
-	"\x02Importar desde Firefox\x02Importar desde Chrome\x02Importar desde Sa" +
-	"fari\x02Exportar en JSON o HTML\x02Impulsado por API\x02Acceso completo " +
-	"a la API GraphQL\x02Soporte OAuth2\x02Alojamiento propio\x02Totalmente d" +
-	"e código abierto\x02Hospeda tu propia versión de Link Taco\x02Documentac" +
-	"ión\x02Detalles de precios y características para LinkTaco.com\x02precio" +
-	"s, enlaces, linktaco, características, planes, planes de precios\x02¡Bie" +
-	"nvenido a LinkTaco!\x02Aquí puedes combinar todas tus necesidades de gua" +
-	"rdar y compartir enlaces en un solo paquete compacto. Como un taco. Un t" +
-	"aco de enlaces, por así decirlo.\x02LinkTaco es una plataforma de código" +
-	" abierto donde puedes alojar todos tus enlaces. Dominios personalizados," +
-	" códigos QR, análisis, API completa, múltiples organizaciones con miembr" +
-	"os ilimitados son solo algunas de las características incluidas.\x02Los " +
-	"marcadores sociales no son nuevos, solo se han olvidado. El acortamiento" +
-	" de enlaces con análisis ha existido siempre. Los listados de enlaces se" +
-	" volvieron populares cuando las redes sociales comenzaron a permitirnos " +
-	"publicar un enlace a nuestros sitios web en nuestros perfiles.\x02Hasta " +
-	"ahora, todas estas cosas se alojaban en diferentes servicios.\x02Marcado" +
-	"res sociales: Pinboard (Delicious)\x02Acortamiento de enlaces: Bitly y o" +
-	"tros\x02Listados de enlaces: Linktree y otros\x02Adiós Pinboard. Adiós B" +
-	"itly. Adiós Linktree. ¡Hola LinkTaco!\x02Como somos un\x02proyecto 100% " +
-	"de código abierto\x04\x01 \x00\\\x02puedes alojar tu propia instancia si" +
-	" deseas tener control total sobre tu propia plataforma.\x02Consulta la d" +
-	"ocumentación de instalación para más información.\x02¿Listo para comenza" +
-	"r? Es gratis crear una cuenta y usarla para siempre (con algunas limitac" +
-	"iones). Para usar todas las funciones, solo tienes que pagar unos pocos " +
-	"dólares al año, o unos pocos al mes si eres una empresa, y eso es todo. " +
-	"¡Simple!\x02Explorar funcciones\x02Organizar marcadores\x02Lista de Lin" +
-	"ks\x02Colaboración\x02Integraciones\x02Importar Exportar\x02Listados de " +
-	"enlaces ilimitados (para biografías en redes sociales, etc.)\x02Los miem" +
-	"bros pueden agregar/editar/eliminar enlaces (si se permite)\x02Los miemb" +
-	"ros tienen acceso según los permisos otorgados\x02Widget de marcadores d" +
-	"el navegador\x02Lista de Dominio\x02Eliminar\x02Búsqueda de Nombre\x02Se" +
-	"rvicio\x02para\x02Link Cortos\x02Sin Dominios\x02Crear Dominio\x02Migrar" +
-	" Links Cortos\x02Los links viejos no funcionanrán. Todos los códigos ser" +
-	"án movidos al nuevo dominio.\x02Dominio creado con éxito\x02Eliminar Do" +
-	"minio\x02%[1]s\x02Dominio elminado con éxito\x02Si\x02Desea eliminar est" +
-	"e dominio\x02Tus Organizaciones\x02Código Abierto\x02Patrocinado\x02Paga" +
-	"do\x02Activado\x02Desactivado\x02Manejar Subscripción\x02Dominios\x02Man" +
-	"ejar Miembros\x02Exportar\x02Importar\x02Historial de Pagos\x02Crear Org" +
-	"anización\x02Nombre de usuario de Organización\x02Visibilidad predetermi" +
-	"nada de marcadores\x02Lo sentimos, has alcanzado el número de cuentas gr" +
-	"atuitas disponibles. Por favor actualice su cuenta gratuita para crear m" +
-	"ás\x02Público\x02Privado\x02Organización creada con éxito\x02Actualizar" +
-	" Organización\x02Está habilitado\x02Organización actualizada con éxito" +
-	"\x02Agregar Miembro\x02Permiso\x02Por favor actualice a cuenta de negoci" +
-	"o para agregar miembros\x02Leer\x02Escribir\x02Escritura de administrado" +
-	"r\x02Una invitación fue enviada a este usuario\x02Algo salió mal, imposi" +
-	"ble enviar invitación\x02Eliminar miembro de la organización\x02Algo sal" +
-	"ió mal. No se pudo eliminar a este miembro: %[1]s\x02Miembro eliminado c" +
-	"on éxito\x02¿Eliminar al miembro %[1]s (%[2]s) de la Organización %[3]s?" +
-	"\x02Miembro agregado con éxito\x02Algo salió mal. Imposible obtener los " +
-	"datos de miembros\x02Lista de Miembros\x02Sin miembros\x02Crear Enlace" +
-	"\x02Título\x02Visibilidad\x02Sin leer\x02Destacado\x02Etiquetas\x02Usa c" +
-	"omas para separar las etiquetas. Ejemplo: etiqueta 1, etiqueta 2, etique" +
-	"ta 3\x02URL de archivo\x02marcador\x02También puedes enviar a través del" +
-	"\x02Un link fue creado con éxito\x02Error consultando url refererida: No" +
-	" encontrada\x02Error consultando link referido: %[1]v\x02marcador\x02Mar" +
-	"cadores Populares\x02Esto no es un concurso de popularidad o algo pareci" +
-	"do, pero es raro que no hayan links!\x02Enlaces más populares en LinkTac" +
-	"o.com\x02populares, enlaces, linktaco, características, planes, planes d" +
-	"e precios\x02Links Populares\x02Siguiendo\x02Dejar de seguir\x02Sin orga" +
-	"nizaciones\x02Feed\x02Por\x02Buscar\x02Tu feed está vacío :( Sigue a alg" +
-	"unas personas. Prueba los feeds Populares o Recientes para encontrar gen" +
-	"te interesante a seguir.\x02Búsqueda Avanzada\x02Incluir Tags\x02Excluir" +
-	" Tags\x02Limpiar\x02Siguiendo\x02Marcadores Guardados\x02Este feed no ti" +
-	"ene enlaces. ¡Buuu!\x02Marcadores recientes para la URL %[1]s añadidos e" +
-	"n LinkTaco.com\x02recientes, públicos, enlaces, linktaco\x02guardado\x02" +
-	"Marcadores Recientes\x02Todos\x02Sin etiquetar\x02Marcar como leído\x02M" +
-	"arcar como no leído\x02Destacar\x02No destacar\x02Archivar\x02Seguir\x02" +
-	"más nuevo\x02más vieja\x02Enlaces públicos recientes añadidos a %[1]s en" +
-	" LinkTaco.com\x02Enlaces públicos recientes añadidos a LinkTaco.com\x02L" +
-	"inks Recientes\x02%[1]s Enlaces\x02Tienes %[1]d enlaces restrigidos guar" +
-	"dados.\x02Actualiza la organización para activarlos.\x02Detalle de Enlac" +
-	"e\x02Publicación Pública\x02Públicación Privada\x02Marcador '%[1]s' en L" +
-	"inkTaco.com\x02marcador, nota, detalle, popular, enlaces, linktaco\x02Bo" +
-	"rrar Marcador\x02Algo salió mal. No se pudo eliminar este marcador.\x02M" +
-	"arcador eliminado con éxito\x02¿Realmente deseas eliminar este marcador?" +
-	"\x02Actualizar Enlace\x02Desea eliminar\x02Link actualizado con éxito" +
-	"\x02Código QR por Link Taco!\x02Serás redireccionado en 10 segundos.\x02" +
-	"Detalles de Código QR\x02Bajar Imágen\x02Elimiar Código QR\x02Algo salió" +
-	" mal. El Código QE no pudo ser eliminado.\x02Código QR elminado con éxit" +
-	"o\x02Desea eliminar este código qr\x02Exportar Datos\x02Formato de archi" +
-	"vo\x02Esta función no está habilitada para cuentas gratuitas. Por favor " +
-	"actualizar\x02Como administrador de sistema corrar el siguiente comando " +
-	"en el canal que desees conectar\x02Desconectar\x02Conectar\x02Conectado" +
-	"\x02Importar Datos\x02Fuente\x02Click en Manejar Marcadores desde el men" +
-	"ú de Marcadores\x02Una nueva ventana llamada Biblioteca se abrirá\x02En" +
-	" la barra lateral izquierda seleccione la carpeta que desea exportar. Pa" +
-	"ra exportar todos los marcadores selecciones Todos los Marcadores\x02Cli" +
-	"ck en el ícono con dos flechas (arriba y abajo) y escoje 'Exportar Marca" +
-	"dor a HTML'\x02En el menú de Archivo selecciones Exportar\x02Selecione E" +
-	"xportar Marcadores\x02Ve al menú de Marcadores y escoge Manejar Marcador" +
-	"es\x02En la barra latareral izquierda selecciones la carpeta que desea e" +
-	"xportar\x02En la barra marcadores, de click en los tres puntos de la par" +
-	"te superior derecha\x02Click en Exportar Marcadores\x02Visita https://pi" +
-	"nboard.in/export/ y da click en JSON\x02Al importar a una cuenta/organiz" +
-	"ación gratuita, todos los marcadores privados del tablero se marcarán co" +
-	"mo restringidos.\x02Actualice su cuenta para admitir marcadores privados" +
-	".\x02Instrucciones\x02Marcadores de Safari\x02Marcadores de Chrome\x02Ma" +
-	"rcadores de Firefox\x02Se está procesando la importación de tu marcador." +
-	" Te notificaremos cuando se complete.\x02Actualizar Nota\x02Nota\x02Nota" +
-	" '%[1]s' en LinkTaco.com\x02nota, detalle, popular, enlaces, linktaco" +
-	"\x02Crear Nota\x02Una nota fue creada con éxito\x02Error consultado nota" +
-	" referenciada: %[1]v\x02Tablero\x02Tour\x02Reciente\x02Popular\x02Catego" +
-	"rías\x02Sobre\x02Iniciar Sesión\x02Cerrar Sesión\x02Zona de pruebas de G" +
-	"QL\x02Guardar Enlace\x02Guardar Noa\x02Token Personales\x02Aplicaciones " +
-	"Clientes\x02Listas\x02Links Cortos\x02Administrar\x02Ayuda\x02Blog\x02Ac" +
-	"tualizar Links\x02URL\x02Orden\x02Eliminar Lista\x02Algo salió mal. El e" +
-	"nlace no pudo ser eliminado\x02Enlace creado con éxito\x02Desea eliminar" +
-	" este link\x02Crear Links\x02Anterior\x02Sin Links\x02Actualizar Lista" +
-	"\x02Dominio\x02Es por defecto\x02Eliminar Foto\x02Otro\x02Otro Nombre" +
-	"\x02Links Sociales\x02Lista creada con éxito\x02Crear Lista\x02Una lista" +
-	" fue creada con éxito\x02Manejar Links\x02Sin Listas\x02Fecha de Creació" +
-	"n\x02Códigos QR\x02Valor de dominio inválido\x02Lista eliminada con éxit" +
-	"o\x02¿Realmente quieres eliminar esta lista?\x02Crear Código QR\x02Crear" +
-	"\x02Descargar\x02Fondo de pantalla personalizado\x02Código QR creado con" +
-	" éxito\x02Código QR de Lista\x02Ver\x02No hay Códigos QR\x02Desconectar " +
-	"Mattermost\x02Mattermost desconectado con éxito\x02Desea realmente desco" +
-	"nectar esta organización de mattermost\x02Connectar con Mattermost\x02Es" +
-	"te equipo ya se encuentra vinculado a una organización\x02¿Deseas conect" +
-	"ar esta organización con mattermost?\x02Esta función está restringida pa" +
-	"ra cuentas gratis. Por favor actualiza\x02La organización fue vinculada " +
-	"con éxito\x02Lo sentimos, las cuentas gratuitas no soportan la integraci" +
-	"ón con Mattermost. Por favor actualice\x02Conectar Usuario\x02Para inte" +
-	"ractuar con mattermost tienes que conectar tu cuenta con tu usuario de L" +
-	"ink Taco\x02¿Desea proceder?\x02Usuario conectado con éxito\x02Connexión" +
-	" con slack no encontrada\x02Te enviamos un mensaje privado\x02El texto a" +
-	" ser buscado es requerido\x02No se encuentraron links para %[1]s\x02Orga" +
-	"nización no encontrada\x02El título es requerido\x02La url es requerida" +
-	"\x02El código es requerido\x02El dominio es requerido\x02Dominio no enco" +
-	"ntrado\x02A nuevo short fue creado con éxito\x02Url es requerida\x02Un n" +
-	"uevo enlace fue creado con éxito\x02Por favor haga click en el próximo l" +
-	"ink para vincular una organización %[1]s\x02Instalacción exitosa\x02algo" +
-	" salió mal: %[1]s\x02hecho\x02Organización inválida proporcionada\x02No " +
-	"se encontró organización predeterminada\x02Link Corto\x02Sin Links Corto" +
-	"s\x02Crear Link Corto\x02Código Corto\x02Sin Dominio\x02Un link corto fu" +
-	"e creado con éxito\x02Actualizar Link Corto\x02Link Corto actualizado co" +
-	"n éxito\x02Eliminar Link Corto\x02Link Corto eliminado con éxito\x02URL " +
-	"acortada por Link Taco!\x02No se proporcionó un argumento de URL\x02%[1]" +
-	"s: dominio no encontrado\x02Tu enlace corto fue creado con éxito: %[1]s" +
-	"\x02Tu enlace fue guardado con éxito. Detalles aquí: %[1]s\x02Buscar Lin" +
-	"k\x02Por favor vincule tu usuario de slack con el link: %[1]s\x02Te envi" +
-	"amos un mensaje directo con instrucciones\x02Agregar Link\x02Desconectar" +
-	" de Slack\x02Slack fue desconectado con éxito\x02Desea desconectar esta " +
-	"organización de slack\x02Lo sentimos, las cuentas gratis no soportan int" +
-	"egración con Slack. Por favor actualice su subscripcón para continuar" +
-	"\x02Para interactuar con Link Taco tienes que conectar tu cuenta de slac" +
-	"k con tu usuario de Link Taco\x02Algo salió mal. El usuario no puede ser" +
-	" vinculado.\x02Conectar a Slack Workspace\x02Respuesta de slack inválida" +
-	"\x02¿Deseas conectar con Slack?\x02Organización vinculada con éxito con " +
-	"slack\x02Email y/o password inválido\x02Las nuevas contraseñas no coinci" +
-	"den\x02El usuario no está autenticado\x02La contraseña actual es incorre" +
-	"cta\x02Este campo es requerido\x02Por favor introduzca un correo válido" +
-	"\x02Por favor introduzca un número válido\x02El '%[1]s' falló."
+	"suario no sigue a esta organización\x02El usuario no sigue a %[1]s\x02Or" +
+	"ganización no encontrada.\x02Etiqueta no encontrada.\x02Se requiere nuev" +
+	"a etiqueta.\x02El valor de newTag no es válido.\x02Etiqueta renombrada e" +
+	"xitosamente\x02orgType Inválido\x02Visibilidad no válida\x02Valor de niv" +
+	"el inválido\x02Valor de estado inválido\x02Un Slug válido de Organizació" +
+	"n es requerido\x02Slug de Organización es requerida para dominios de niv" +
+	"el de usuario\x04\x00\x01 \x0d\x02ID inválido\x02El dominio está en uso." +
+	" No se puede cambiar el servicio.\x02Nombre es requerido\x02Email es req" +
+	"uerido\x02Invitación de Registro\x02Linktaco: Invitación de Registro\x02" +
+	"Has sido invitado por %[1]s para unirse a Link Taco\x02Por favor de clic" +
+	"k en el siguiente link\x02No es posible enviar ambos cursores after y be" +
+	"fore\x02No encontrado\x02BaseURL no encontrada\x02Tipo de nube de etique" +
+	"tas inválido sin el identificador de la organización\x02Solo los miembro" +
+	"s con permiso de lectura pueden realizar esta acción\x02No fue posible u" +
+	"na organización adecuada\x02Solo los superusuarios pueden obtener domini" +
+	"os de nivel de sistema\x02Link Corto No Encontrado\x02Tipo de código inv" +
+	"álido\x02El slug de organización es requerido para este tipo de token" +
+	"\x02Acceso Restringido\x02Acceso denegado.\x02ID de listado inválido pro" +
+	"porcionado.\x02Listado inválido para la organización especificada.\x02Zo" +
+	"na de pruebas de GraphQL\x02Envíar Consulta\x02Regresar a Inicio\x02Fuen" +
+	"te de origen inválida para el importador.\x02El archivo es requerido\x02" +
+	"El archivo subido para esta fuente debería de ser html\x02El archivo sub" +
+	"ido para esta fuente debe de ser json\x02Tokens de Acceso Personal\x02Co" +
+	"mentario\x02Creado\x02Expirado\x02Revocar\x02No has creado ningún token " +
+	"de acceso personal para tu cuenta\x02Clientes Autorizados\x02Nombre de C" +
+	"liente\x02Permiso\x02No has autorizardo ningún client de tercero para ac" +
+	"ceder a tu cuenta.\x02Agregar Token de Acceso Personal\x02Nota: Tu token" +
+	" de acceso <strong>nunca se te volverá a mostrar.</strong> Guárdalo en s" +
+	"ecreto. Expirará dentro de un año.\x02Revocar Token de Acceso Personal" +
+	"\x02¿Desea revokar este token de acceso persona? Esta acción no puede se" +
+	"r deshecha.\x02Si, hazlo\x02No\x02Acceso personal agregada con éxito\x02" +
+	"Token de autorización revocado con éxito\x02Clientes\x02ID de Cliente" +
+	"\x02Manejar\x02Agregar\x02Sin Clientes\x02Agregar Cliente OAuth2\x02Desc" +
+	"ripción de Cliente\x02URL de redireccionamiento\x02URL de Cliente\x02Cli" +
+	"ent Secreto\x02Nota: Tu cliente secreto nunca será mostrado de nuevo." +
+	"\x02Manejar clientes de OAuth 2.0\x02Revoca tokens de cliente secreto" +
+	"\x02Si los tokens de portador de OAuth 2.0 emitidos para tu cliente de O" +
+	"Auth o tu cliente secreto se han revelado a un tercero, debes revocar to" +
+	"dos los tokens y solicitar que se emitan reemplazos.\x02Revocar cliente " +
+	"de tokens\x02Desregistrar este client OAuth\x02Esto registrará de manera" +
+	" permanente tu client de OAuth 2.0\x02revoca todos los tokens emitidos, " +
+	"y prohíbie la emisión de nuevos tokens.\x02Desregistrar\x02Descripción" +
+	"\x02URL informativa\x02Cliente de OAuth 2.0 registrado\x02Cliente agrega" +
+	"do con éxito\x02Cliente revocado con éxito\x02Cliente recreado con éxito" +
+	"\x02Autorizar\x02gustaría acceder a tu cuenta de Link Taco\x02es una app" +
+	"licación de terceros operada por\x02Podrás revocar este acceso en cualqu" +
+	"ier momento en la tab OAtuh de tu perfíl.\x02Alcance\x02Aprobar\x02Recha" +
+	"zar\x02LinkTaco - La importación de tus marcadores está completa.\x02Hol" +
+	"a,\x02Solo queríamos informarte que la importación de tus marcadores se " +
+	"ha completado con éxito.\x02- Equipo de LinkTaco\x02Dominio Inactivo\x02" +
+	"El dominio %[1]s está actualmente desactivado\x02Por favor actualice la " +
+	"subscripción de su cuenta para reactivarla\x02Precios\x02Cada cuenta pue" +
+	"de crear organizaciones ilimitadas. Cada organización tiene sus propios " +
+	"marcadores, listados, análisis, etc. Todas las características a continu" +
+	"ación pertenecen a cada organización con sus propias URL únicas, agrupac" +
+	"iones, y más.\x02Funcionalidad\x02Gratis\x02Personal\x02Negocio\x02Preci" +
+	"o\x02por año\x02por mes\x02meses\x02Ilimitado\x02Solo público\x02Pruébal" +
+	"o GRATIS\x02Marcadores\x02Guardar enlaces públicos/privados\x02Guardar n" +
+	"otas públicas/privadas\x02Seguir otras organizaciones (social)\x02Organi" +
+	"zar por etiquetas\x02Filtrado/ búsqueda avanzada\x02Fuentes RSS completa" +
+	"s\x02Dominio personalizado + SSL\x02Listados de enlaces\x02Crear listado" +
+	"s de enlaces (por ejemplo, biografías en redes sociales, etc.)\x02Organi" +
+	"zar listados por etiquetas\x02Filtrar/Buscar listados\x02Códigos QR ilim" +
+	"itados por listado\x02Análisis completo\x02Listado\x02Acortamiento de en" +
+	"laces\x02Enlaces cortos ilimitados\x02Organizar enlaces cortos por etiqu" +
+	"etas\x02Filtrar/Buscar enlaces cortos\x02Códigos QR ilimitados por enlac" +
+	"e corto\x02Historial completo de análisis\x02Análisis específicos de cód" +
+	"igos QR\x02Análisis de clics\x02Análisis de referidos\x02Análisis por pa" +
+	"ís\x02Análisis por ciudad\x02Análisis de dispositivos\x02Colaboración /" +
+	" Integraciones\x02Agregar miembros ilimitados a la organización\x02Integ" +
+	"ración con Slack\x02Integración con MatterMost\x02Construye tu propia in" +
+	"tegración\x02Importar / Exportar\x02Importar desde Pinboard\x02Importar " +
+	"desde Firefox\x02Importar desde Chrome\x02Importar desde Safari\x02Expor" +
+	"tar en JSON o HTML\x02Impulsado por API\x02Acceso completo a la API Grap" +
+	"hQL\x02Soporte OAuth2\x02Alojamiento propio\x02Totalmente de código abie" +
+	"rto\x02Hospeda tu propia versión de Link Taco\x02Documentación\x02Detall" +
+	"es de precios y características para LinkTaco.com\x02precios, enlaces, l" +
+	"inktaco, características, planes, planes de precios\x02¡Bienvenido a Lin" +
+	"kTaco!\x02Aquí puedes combinar todas tus necesidades de guardar y compar" +
+	"tir enlaces en un solo paquete compacto. Como un taco. Un taco de enlace" +
+	"s, por así decirlo.\x02LinkTaco es una plataforma de código abierto dond" +
+	"e puedes alojar todos tus enlaces. Dominios personalizados, códigos QR, " +
+	"análisis, API completa, múltiples organizaciones con miembros ilimitados" +
+	" son solo algunas de las características incluidas.\x02Los marcadores so" +
+	"ciales no son nuevos, solo se han olvidado. El acortamiento de enlaces c" +
+	"on análisis ha existido siempre. Los listados de enlaces se volvieron po" +
+	"pulares cuando las redes sociales comenzaron a permitirnos publicar un e" +
+	"nlace a nuestros sitios web en nuestros perfiles.\x02Hasta ahora, todas " +
+	"estas cosas se alojaban en diferentes servicios.\x02Marcadores sociales:" +
+	" Pinboard (Delicious)\x02Acortamiento de enlaces: Bitly y otros\x02Lista" +
+	"dos de enlaces: Linktree y otros\x02Adiós Pinboard. Adiós Bitly. Adiós L" +
+	"inktree. ¡Hola LinkTaco!\x02Como somos un\x02proyecto 100% de código abi" +
+	"erto\x04\x01 \x00\\\x02puedes alojar tu propia instancia si deseas tener" +
+	" control total sobre tu propia plataforma.\x02Consulta la documentación " +
+	"de instalación para más información.\x02¿Listo para comenzar? Es gratis " +
+	"crear una cuenta y usarla para siempre (con algunas limitaciones). Para " +
+	"usar todas las funciones, solo tienes que pagar unos pocos dólares al añ" +
+	"o, o unos pocos al mes si eres una empresa, y eso es todo. ¡Simple!\x02E" +
+	"xplorar funcciones\x02Organizar marcadores\x02Lista de Links\x02Colabora" +
+	"ción\x02Integraciones\x02Importar Exportar\x02Listados de enlaces ilimit" +
+	"ados (para biografías en redes sociales, etc.)\x02Los miembros pueden ag" +
+	"regar/editar/eliminar enlaces (si se permite)\x02Los miembros tienen acc" +
+	"eso según los permisos otorgados\x02Widget de marcadores del navegador" +
+	"\x02Lista de Dominio\x02Eliminar\x02Búsqueda de Nombre\x02Servicio\x02pa" +
+	"ra\x02Link Cortos\x02Sin Dominios\x02Crear Dominio\x02Migrar Links Corto" +
+	"s\x02Los links viejos no funcionanrán. Todos los códigos serán movidos a" +
+	"l nuevo dominio.\x02Dominio creado con éxito\x02Eliminar Dominio\x02%[1]" +
+	"s\x02Dominio elminado con éxito\x02Si\x02Desea eliminar este dominio\x02" +
+	"Tus Organizaciones\x02Código Abierto\x02Patrocinado\x02Pagado\x02Activad" +
+	"o\x02Desactivado\x02Manejar Subscripción\x02Dominios\x02Manejar Miembros" +
+	"\x02Exportar\x02Importar\x02Historial de Pagos\x02Crear Organización\x02" +
+	"Nombre de usuario de Organización\x02Visibilidad predeterminada de marca" +
+	"dores\x02Lo sentimos, has alcanzado el número de cuentas gratuitas dispo" +
+	"nibles. Por favor actualice su cuenta gratuita para crear más\x02Público" +
+	"\x02Privado\x02Organización creada con éxito\x02Actualizar Organización" +
+	"\x02Está habilitado\x02Organización actualizada con éxito\x02Agregar Mie" +
+	"mbro\x02Permiso\x02Por favor actualice a cuenta de negocio para agregar " +
+	"miembros\x02Leer\x02Escribir\x02Escritura de administrador\x02Una invita" +
+	"ción fue enviada a este usuario\x02Algo salió mal, imposible enviar invi" +
+	"tación\x02Eliminar miembro de la organización\x02Algo salió mal. No se p" +
+	"udo eliminar a este miembro: %[1]s\x02Miembro eliminado con éxito\x02¿El" +
+	"iminar al miembro %[1]s (%[2]s) de la Organización %[3]s?\x02Miembro agr" +
+	"egado con éxito\x02Algo salió mal. Imposible obtener los datos de miembr" +
+	"os\x02Lista de Miembros\x02Sin miembros\x02Crear Enlace\x02Título\x02Vis" +
+	"ibilidad\x02Sin leer\x02Destacado\x02Etiquetas\x02Usa comas para separar" +
+	" las etiquetas. Ejemplo: etiqueta 1, etiqueta 2, etiqueta 3\x02URL de ar" +
+	"chivo\x02marcador\x02También puedes enviar a través del\x02Un link fue c" +
+	"reado con éxito\x02Error consultando url refererida: No encontrada\x02Er" +
+	"ror consultando link referido: %[1]v\x02marcador\x02Marcadores Populares" +
+	"\x02Esto no es un concurso de popularidad o algo parecido, pero es raro " +
+	"que no hayan links!\x02Enlaces más populares en LinkTaco.com\x02populare" +
+	"s, enlaces, linktaco, características, planes, planes de precios\x02Link" +
+	"s Populares\x02Siguiendo\x02Dejar de seguir\x02Sin organizaciones\x02Fee" +
+	"d\x02Por\x02Buscar\x02Tu feed está vacío :( Sigue a algunas personas. Pr" +
+	"ueba los feeds Populares o Recientes para encontrar gente interesante a " +
+	"seguir.\x02Búsqueda Avanzada\x02Incluir Tags\x02Excluir Tags\x02Limpiar" +
+	"\x02Siguiendo\x02Marcadores Guardados\x02Este feed no tiene enlaces. ¡Bu" +
+	"uu!\x02Marcadores recientes para la URL %[1]s añadidos en LinkTaco.com" +
+	"\x02recientes, públicos, enlaces, linktaco\x02guardado\x02Marcadores Rec" +
+	"ientes\x02Todos\x02Sin etiquetar\x02Marcar como leído\x02Marcar como no " +
+	"leído\x02Destacar\x02No destacar\x02Archivar\x02Seguir\x02más nuevo\x02m" +
+	"ás vieja\x02Enlaces públicos recientes añadidos a %[1]s en LinkTaco.com" +
+	"\x02Enlaces públicos recientes añadidos a LinkTaco.com\x02Links Reciente" +
+	"s\x02%[1]s Enlaces\x02Tienes %[1]d enlaces restrigidos guardados.\x02Act" +
+	"ualiza la organización para activarlos.\x02Detalle de Enlace\x02Publicac" +
+	"ión Pública\x02Públicación Privada\x02Marcador '%[1]s' en LinkTaco.com" +
+	"\x02marcador, nota, detalle, popular, enlaces, linktaco\x02Borrar Marcad" +
+	"or\x02Algo salió mal. No se pudo eliminar este marcador.\x02Marcador eli" +
+	"minado con éxito\x02¿Realmente deseas eliminar este marcador?\x02Actuali" +
+	"zar Enlace\x02Desea eliminar\x02Link actualizado con éxito\x02Código QR " +
+	"por Link Taco!\x02Serás redireccionado en 10 segundos.\x02Detalles de Có" +
+	"digo QR\x02Bajar Imágen\x02Elimiar Código QR\x02Algo salió mal. El Códig" +
+	"o QE no pudo ser eliminado.\x02Código QR elminado con éxito\x02Desea eli" +
+	"minar este código qr\x02Exportar Datos\x02Formato de archivo\x02Esta fun" +
+	"ción no está habilitada para cuentas gratuitas. Por favor actualizar\x02" +
+	"Como administrador de sistema corrar el siguiente comando en el canal qu" +
+	"e desees conectar\x02Desconectar\x02Conectar\x02Conectado\x02Importar Da" +
+	"tos\x02Fuente\x02Click en Manejar Marcadores desde el menú de Marcadores" +
+	"\x02Una nueva ventana llamada Biblioteca se abrirá\x02En la barra latera" +
+	"l izquierda seleccione la carpeta que desea exportar. Para exportar todo" +
+	"s los marcadores selecciones Todos los Marcadores\x02Click en el ícono c" +
+	"on dos flechas (arriba y abajo) y escoje 'Exportar Marcador a HTML'\x02E" +
+	"n el menú de Archivo selecciones Exportar\x02Selecione Exportar Marcador" +
+	"es\x02Ve al menú de Marcadores y escoge Manejar Marcadores\x02En la barr" +
+	"a latareral izquierda selecciones la carpeta que desea exportar\x02En la" +
+	" barra marcadores, de click en los tres puntos de la parte superior dere" +
+	"cha\x02Click en Exportar Marcadores\x02Visita https://pinboard.in/export" +
+	"/ y da click en JSON\x02Al importar a una cuenta/organización gratuita, " +
+	"todos los marcadores privados del tablero se marcarán como restringidos." +
+	"\x02Actualice su cuenta para admitir marcadores privados.\x02Instruccion" +
+	"es\x02Marcadores de Safari\x02Marcadores de Chrome\x02Marcadores de Fire" +
+	"fox\x02Se está procesando la importación de tu marcador. Te notificaremo" +
+	"s cuando se complete.\x02Actualizar Nota\x02Nota\x02Nota '%[1]s' en Link" +
+	"Taco.com\x02nota, detalle, popular, enlaces, linktaco\x02Crear Nota\x02U" +
+	"na nota fue creada con éxito\x02Error consultado nota referenciada: %[1]" +
+	"v\x02Tablero\x02Tour\x02Reciente\x02Popular\x02Categorías\x02Sobre\x02In" +
+	"iciar Sesión\x02Cerrar Sesión\x02Zona de pruebas de GQL\x02Guardar Enlac" +
+	"e\x02Guardar Noa\x02Token Personales\x02Aplicaciones Clientes\x02Listas" +
+	"\x02Links Cortos\x02Administrar\x02Ayuda\x02Blog\x02Actualizar Links\x02" +
+	"URL\x02Orden\x02Eliminar Lista\x02Algo salió mal. El enlace no pudo ser " +
+	"eliminado\x02Enlace creado con éxito\x02Desea eliminar este link\x02Crea" +
+	"r Links\x02Anterior\x02Sin Links\x02Actualizar Lista\x02Dominio\x02Es po" +
+	"r defecto\x02Eliminar Foto\x02Otro\x02Otro Nombre\x02Links Sociales\x02L" +
+	"ista creada con éxito\x02Crear Lista\x02Una lista fue creada con éxito" +
+	"\x02Manejar Links\x02Sin Listas\x02Fecha de Creación\x02Códigos QR\x02Va" +
+	"lor de dominio inválido\x02Lista eliminada con éxito\x02¿Realmente quier" +
+	"es eliminar esta lista?\x02Crear Código QR\x02Crear\x02Descargar\x02Fond" +
+	"o de pantalla personalizado\x02Código QR creado con éxito\x02Código QR d" +
+	"e Lista\x02Ver\x02No hay Códigos QR\x02Desconectar Mattermost\x02Matterm" +
+	"ost desconectado con éxito\x02Desea realmente desconectar esta organizac" +
+	"ión de mattermost\x02Connectar con Mattermost\x02Este equipo ya se encue" +
+	"ntra vinculado a una organización\x02¿Deseas conectar esta organización " +
+	"con mattermost?\x02Esta función está restringida para cuentas gratis. Po" +
+	"r favor actualiza\x02La organización fue vinculada con éxito\x02Lo senti" +
+	"mos, las cuentas gratuitas no soportan la integración con Mattermost. Po" +
+	"r favor actualice\x02Conectar Usuario\x02Para interactuar con mattermost" +
+	" tienes que conectar tu cuenta con tu usuario de Link Taco\x02¿Desea pro" +
+	"ceder?\x02Usuario conectado con éxito\x02Connexión con slack no encontra" +
+	"da\x02Te enviamos un mensaje privado\x02El texto a ser buscado es requer" +
+	"ido\x02No se encuentraron links para %[1]s\x02Organización no encontrada" +
+	"\x02El título es requerido\x02La url es requerida\x02El código es requer" +
+	"ido\x02El dominio es requerido\x02Dominio no encontrado\x02A nuevo short" +
+	" fue creado con éxito\x02Url es requerida\x02Un nuevo enlace fue creado " +
+	"con éxito\x02Por favor haga click en el próximo link para vincular una o" +
+	"rganización %[1]s\x02Instalacción exitosa\x02algo salió mal: %[1]s\x02he" +
+	"cho\x02Organización inválida proporcionada\x02No se encontró organizació" +
+	"n predeterminada\x02Link Corto\x02Sin Links Cortos\x02Crear Link Corto" +
+	"\x02Código Corto\x02Sin Dominio\x02Un link corto fue creado con éxito" +
+	"\x02Actualizar Link Corto\x02Link Corto actualizado con éxito\x02Elimina" +
+	"r Link Corto\x02Link Corto eliminado con éxito\x02URL acortada por Link " +
+	"Taco!\x02No se proporcionó un argumento de URL\x02%[1]s: dominio no enco" +
+	"ntrado\x02Tu enlace corto fue creado con éxito: %[1]s\x02Tu enlace fue g" +
+	"uardado con éxito. Detalles aquí: %[1]s\x02Buscar Link\x02Por favor vinc" +
+	"ule tu usuario de slack con el link: %[1]s\x02Te enviamos un mensaje dir" +
+	"ecto con instrucciones\x02Agregar Link\x02Desconectar de Slack\x02Slack " +
+	"fue desconectado con éxito\x02Desea desconectar esta organización de sla" +
+	"ck\x02Lo sentimos, las cuentas gratis no soportan integración con Slack." +
+	" Por favor actualice su subscripcón para continuar\x02Para interactuar c" +
+	"on Link Taco tienes que conectar tu cuenta de slack con tu usuario de Li" +
+	"nk Taco\x02Algo salió mal. El usuario no puede ser vinculado.\x02Conecta" +
+	"r a Slack Workspace\x02Respuesta de slack inválida\x02¿Deseas conectar c" +
+	"on Slack?\x02Organización vinculada con éxito con slack\x02Email y/o pas" +
+	"sword inválido\x02Las nuevas contraseñas no coinciden\x02El usuario no e" +
+	"stá autenticado\x02La contraseña actual es incorrecta\x02Este campo es r" +
+	"equerido\x02Por favor introduzca un correo válido\x02Por favor introduzc" +
+	"a un número válido\x02El '%[1]s' falló."
 
-	// Total table size 51679 bytes (50KiB); checksum: 4E60D831
+	// Total table size 51918 bytes (50KiB); checksum: CB437462
diff --git a/internal/translations/locales/en/out.gotext.json b/internal/translations/locales/en/out.gotext.json
index e98758e..46f3629 100644
--- a/internal/translations/locales/en/out.gotext.json
+++ b/internal/translations/locales/en/out.gotext.json
@@ -1787,6 +1787,41 @@
             ],
             "fuzzy": true
         },
+        {
+            "id": "Organization not found.",
+            "message": "Organization not found.",
+            "translation": "Organization not found.",
+            "translatorComment": "Copied from source.",
+            "fuzzy": true
+        },
+        {
+            "id": "Tag not found.",
+            "message": "Tag not found.",
+            "translation": "Tag not found.",
+            "translatorComment": "Copied from source.",
+            "fuzzy": true
+        },
+        {
+            "id": "New tag is required.",
+            "message": "New tag is required.",
+            "translation": "New tag is required.",
+            "translatorComment": "Copied from source.",
+            "fuzzy": true
+        },
+        {
+            "id": "newTag value is not valid.",
+            "message": "newTag value is not valid.",
+            "translation": "newTag value is not valid.",
+            "translatorComment": "Copied from source.",
+            "fuzzy": true
+        },
+        {
+            "id": "Tag renamed successfully",
+            "message": "Tag renamed successfully",
+            "translation": "Tag renamed successfully",
+            "translatorComment": "Copied from source.",
+            "fuzzy": true
+        },
         {
             "id": "Invalid orgType",
             "message": "Invalid orgType",
@@ -1979,13 +2014,6 @@
             "translatorComment": "Copied from source.",
             "fuzzy": true
         },
-        {
-            "id": "Organization not found.",
-            "message": "Organization not found.",
-            "translation": "Organization not found.",
-            "translatorComment": "Copied from source.",
-            "fuzzy": true
-        },
         {
             "id": "Invalid listing ID provided",
             "message": "Invalid listing ID provided",
diff --git a/internal/translations/locales/es/messages.gotext.json b/internal/translations/locales/es/messages.gotext.json
index 9a9ed94..bd02826 100644
--- a/internal/translations/locales/es/messages.gotext.json
+++ b/internal/translations/locales/es/messages.gotext.json
@@ -1291,6 +1291,31 @@
                 }
             ]
         },
+        {
+            "id": "Organization not found.",
+            "message": "Organization not found.",
+            "translation": "Organización no encontrada."
+        },
+        {
+            "id": "Tag not found.",
+            "message": "Tag not found.",
+            "translation": "Etiqueta no encontrada."
+        },
+        {
+            "id": "New tag is required.",
+            "message": "New tag is required.",
+            "translation": "Se requiere nueva etiqueta."
+        },
+        {
+            "id": "newTag value is not valid.",
+            "message": "newTag value is not valid.",
+            "translation": "El valor de newTag no es válido."
+        },
+        {
+            "id": "Tag renamed successfully",
+            "message": "Tag renamed successfully",
+            "translation": "Etiqueta renombrada exitosamente"
+        },
         {
             "id": "Invalid orgType",
             "message": "Invalid orgType",
@@ -1431,11 +1456,6 @@
             "message": "Access denied.",
             "translation": "Acceso denegado."
         },
-        {
-            "id": "Organization not found.",
-            "message": "Organization not found.",
-            "translation": "Organización no encontrada."
-        },
         {
             "id": "Invalid listing ID provided",
             "message": "Invalid listing ID provided",
diff --git a/internal/translations/locales/es/out.gotext.json b/internal/translations/locales/es/out.gotext.json
index 9a9ed94..bd02826 100644
--- a/internal/translations/locales/es/out.gotext.json
+++ b/internal/translations/locales/es/out.gotext.json
@@ -1291,6 +1291,31 @@
                 }
             ]
         },
+        {
+            "id": "Organization not found.",
+            "message": "Organization not found.",
+            "translation": "Organización no encontrada."
+        },
+        {
+            "id": "Tag not found.",
+            "message": "Tag not found.",
+            "translation": "Etiqueta no encontrada."
+        },
+        {
+            "id": "New tag is required.",
+            "message": "New tag is required.",
+            "translation": "Se requiere nueva etiqueta."
+        },
+        {
+            "id": "newTag value is not valid.",
+            "message": "newTag value is not valid.",
+            "translation": "El valor de newTag no es válido."
+        },
+        {
+            "id": "Tag renamed successfully",
+            "message": "Tag renamed successfully",
+            "translation": "Etiqueta renombrada exitosamente"
+        },
         {
             "id": "Invalid orgType",
             "message": "Invalid orgType",
@@ -1431,11 +1456,6 @@
             "message": "Access denied.",
             "translation": "Acceso denegado."
         },
-        {
-            "id": "Organization not found.",
-            "message": "Organization not found.",
-            "translation": "Organización no encontrada."
-        },
         {
             "id": "Invalid listing ID provided",
             "message": "Invalid listing ID provided",
diff --git a/models/audit_log.go b/models/audit_log.go
index 4a9301b..4327625 100644
--- a/models/audit_log.go
+++ b/models/audit_log.go
@@ -52,6 +52,9 @@ const (
 
 	LOG_ORG_FOLLOW   = "org_follow"
 	LOG_ORG_UNFOLLOW = "org_unfollow"
+
+	LOG_TAG_RENAMED = "tag_renamed"
+	LOG_TAG_DELETED = "tag_deleted"
 )
 
 func RecordAuditLog(ctx context.Context, userID int,
diff --git a/models/organization.go b/models/organization.go
index 8bca091..551d308 100644
--- a/models/organization.go
+++ b/models/organization.go
@@ -332,22 +332,6 @@ func (o *Organization) ReachedMonthlyShortLimit(ctx context.Context, limit int)
 
 }
 
-// This function ennable or disable based on the boolean flag a batch of organization
-func ToggleOrganizaiongBatch(ctx context.Context, opts *database.FilterOptions, flag bool) error {
-	err := database.WithTx(ctx, nil, func(tx *sql.Tx) error {
-		var err error
-		_, err = sq.
-			Update("organizations").
-			Set("is_active", flag).
-			Where(opts.Filter).
-			PlaceholderFormat(database.GetPlaceholderFormat()).
-			RunWith(tx).
-			ExecContext(ctx)
-		return err
-	})
-	return err
-}
-
 func (o *Organization) TagCloud(ctx context.Context, order TagCloudOrdering) ([]*Tag, error) {
 	var canRead bool
 	opts := &database.FilterOptions{
@@ -371,3 +355,99 @@ func (o *Organization) TagCloud(ctx context.Context, order TagCloudOrdering) ([]
 	}
 	return GetTagCloud(ctx, opts)
 }
+
+// DeleteTagForService expects service value to be verified and tag to be provided.
+func (o *Organization) DeleteTagForService(ctx context.Context, service string, tag *Tag) error {
+	var junctionTable, parentTable, foreignKey string
+	
+	switch service {
+	case DomainServiceLinks:
+		junctionTable = "tag_links"
+		parentTable = "org_links"
+		foreignKey = "org_link_id"
+	case DomainServiceShort:
+		junctionTable = "tag_link_shorts"
+		parentTable = "link_shorts"
+		foreignKey = "link_short_id"
+	case DomainServiceList:
+		junctionTable = "tag_listings"
+		parentTable = "listings"
+		foreignKey = "listing_id"
+	default:
+		return fmt.Errorf("Invalid service type")
+	}
+	
+	whereClause := sq.And{
+		sq.Eq{junctionTable + ".tag_id": tag.ID},
+		sq.Expr(fmt.Sprintf(
+			"EXISTS (SELECT 1 FROM %s WHERE %s.id = %s.%s AND %s.org_id = ?)",
+			parentTable, parentTable, junctionTable, foreignKey, parentTable,
+		), o.ID),
+	}
+	
+	return database.WithTx(ctx, nil, func(tx *sql.Tx) error {
+		_, err := sq.Delete(junctionTable).
+			Where(whereClause).
+			PlaceholderFormat(database.GetPlaceholderFormat()).
+			RunWith(tx).
+			ExecContext(ctx)
+		return err
+	})
+}
+
+// RenameTagForService reassigns new tag (nTag) where old tag (oTag) was previously assigned
+func (o *Organization) RenameTagForService(ctx context.Context,
+	service string, oTag, nTag *Tag) error {
+	var junctionTable, parentTable, foreignKey string
+	
+	switch service {
+	case DomainServiceLinks:
+		junctionTable = "tag_links"
+		parentTable = "org_links"
+		foreignKey = "org_link_id"
+	case DomainServiceShort:
+		junctionTable = "tag_link_shorts"
+		parentTable = "link_shorts"
+		foreignKey = "link_short_id"
+	case DomainServiceList:
+		junctionTable = "tag_listings"
+		parentTable = "listings"
+		foreignKey = "listing_id"
+	default:
+		return fmt.Errorf("Invalid service type")
+	}
+	
+	whereClause := sq.And{
+		sq.Eq{junctionTable + ".tag_id": oTag.ID},
+		sq.Expr(fmt.Sprintf(
+			"EXISTS (SELECT 1 FROM %s WHERE %s.id = %s.%s AND %s.org_id = ?)",
+			parentTable, parentTable, junctionTable, foreignKey, parentTable,
+		), o.ID),
+	}
+	
+	return database.WithTx(ctx, nil, func(tx *sql.Tx) error {
+		_, err := sq.Update(junctionTable).
+			Set("tag_id", nTag.ID).
+			Where(whereClause).
+			PlaceholderFormat(database.GetPlaceholderFormat()).
+			RunWith(tx).
+			ExecContext(ctx)
+		return err
+	})
+}
+
+// This function ennable or disable based on the boolean flag a batch of organization
+func ToggleOrganizaiongBatch(ctx context.Context, opts *database.FilterOptions, flag bool) error {
+	err := database.WithTx(ctx, nil, func(tx *sql.Tx) error {
+		var err error
+		_, err = sq.
+			Update("organizations").
+			Set("is_active", flag).
+			Where(opts.Filter).
+			PlaceholderFormat(database.GetPlaceholderFormat()).
+			RunWith(tx).
+			ExecContext(ctx)
+		return err
+	})
+	return err
+}
-- 
2.49.1