Repository: ctreminiom/go-atlassian
Pull request #27 (2021-04-18 02:52:03)

Dev


Patch:
diff --git a/jira/examples/issue-vote/add/add.go b/jira/examples/issue-vote/add/add.go
new file mode 100644
index 0000000..0747b81
--- /dev/null
+++ b/jira/examples/issue-vote/add/add.go
@@ -0,0 +1,44 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	response, err := atlassian.Issue.Votes.Add(context.Background(), "KP-2")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+}
diff --git a/jira/examples/issue-vote/delete/delete.go b/jira/examples/issue-vote/delete/delete.go
new file mode 100644
index 0000000..f056ef1
--- /dev/null
+++ b/jira/examples/issue-vote/delete/delete.go
@@ -0,0 +1,44 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	response, err := atlassian.Issue.Votes.Delete(context.Background(), "KP-2")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+}
diff --git a/jira/examples/issue-vote/gets/gets.go b/jira/examples/issue-vote/gets/gets.go
new file mode 100644
index 0000000..a9396f6
--- /dev/null
+++ b/jira/examples/issue-vote/gets/gets.go
@@ -0,0 +1,48 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	votes, response, err := atlassian.Issue.Votes.Gets(context.Background(), "KP-2")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+	for _, voter := range votes.Voters {
+		log.Println(voter.DisplayName, voter.Self)
+	}
+}
diff --git a/jira/examples/issue-watcher/add/add.go b/jira/examples/issue-watcher/add/add.go
new file mode 100644
index 0000000..ab9c1a2
--- /dev/null
+++ b/jira/examples/issue-watcher/add/add.go
@@ -0,0 +1,44 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	response, err := atlassian.Issue.Watchers.Add(context.Background(), "KP-2")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+}
diff --git a/jira/examples/issue-watcher/delete/delete.go b/jira/examples/issue-watcher/delete/delete.go
new file mode 100644
index 0000000..a73e4ae
--- /dev/null
+++ b/jira/examples/issue-watcher/delete/delete.go
@@ -0,0 +1,44 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	response, err := atlassian.Issue.Watchers.Delete(context.Background(), "KP-2", "5b86be50b8e3cb5895860d6d")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+}
diff --git a/jira/examples/issue-watcher/gets/gets.go b/jira/examples/issue-watcher/gets/gets.go
new file mode 100644
index 0000000..2511230
--- /dev/null
+++ b/jira/examples/issue-watcher/gets/gets.go
@@ -0,0 +1,50 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	watchers, response, err := atlassian.Issue.Watchers.Gets(context.Background(), "KP-2")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+	log.Println(watchers.IsWatching, watchers.WatchCount)
+
+	for _, watcher := range watchers.Watchers {
+		log.Println(watcher.Self, watcher.AccountID)
+	}
+}
diff --git a/jira/examples/permission-scheme-grant/create/create.go b/jira/examples/permission-scheme-grant/create/create.go
new file mode 100644
index 0000000..cdfd21f
--- /dev/null
+++ b/jira/examples/permission-scheme-grant/create/create.go
@@ -0,0 +1,55 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	var permissionSchemeID = 10001
+
+	grant := &jira.PermissionGrantPayloadScheme{
+		Holder: &jira.PermissionGrantHolderScheme{
+			Parameter: "jira-administrators-system",
+			Type:      "group",
+		},
+		Permission: "EDIT_ISSUES",
+	}
+
+	permissionGrant, response, err := atlassian.Permission.Scheme.Grant.Create(context.Background(), permissionSchemeID, grant)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+	log.Println(permissionGrant)
+}
diff --git a/jira/examples/permission-scheme-grant/delete/delete.go b/jira/examples/permission-scheme-grant/delete/delete.go
new file mode 100644
index 0000000..730d180
--- /dev/null
+++ b/jira/examples/permission-scheme-grant/delete/delete.go
@@ -0,0 +1,49 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	var (
+		permissionSchemeID = 10002
+		permissionGrantID  = 10517
+	)
+
+	response, err := atlassian.Permission.Scheme.Grant.Delete(context.Background(), permissionSchemeID, permissionGrantID)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+}
diff --git a/jira/examples/permission-scheme-grant/get/get.go b/jira/examples/permission-scheme-grant/get/get.go
new file mode 100644
index 0000000..115433c
--- /dev/null
+++ b/jira/examples/permission-scheme-grant/get/get.go
@@ -0,0 +1,50 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	var (
+		permissionSchemeID = 10002
+		permissionGrantID  = 10517
+	)
+
+	grant, response, err := atlassian.Permission.Scheme.Grant.Get(context.Background(), permissionSchemeID, permissionGrantID, []string{"all"})
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+	log.Println(grant)
+}
diff --git a/jira/examples/permission-scheme-grant/gets/gets.go b/jira/examples/permission-scheme-grant/gets/gets.go
new file mode 100644
index 0000000..7421a9d
--- /dev/null
+++ b/jira/examples/permission-scheme-grant/gets/gets.go
@@ -0,0 +1,50 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	var permissionSchemeID = 10002
+
+	grants, response, err := atlassian.Permission.Scheme.Grant.Gets(context.Background(), permissionSchemeID, []string{"all"})
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+	for _, grant := range grants.Permissions {
+		log.Println(grant)
+	}
+}
diff --git a/jira/examples/permission-scheme/create/create.go b/jira/examples/permission-scheme/create/create.go
new file mode 100644
index 0000000..337c956
--- /dev/null
+++ b/jira/examples/permission-scheme/create/create.go
@@ -0,0 +1,68 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	payload := &jira.PermissionSchemeScheme{
+		Name:        "EF Permission Scheme",
+		Description: "EF Permission Scheme description",
+
+		Permissions: []*jira.PermissionGrantScheme{
+			{
+				Permission: "ADMINISTER_PROJECTS",
+				Holder: &jira.PermissionGrantHolderScheme{
+					Parameter: "jira-administrators-system",
+					Type:      "group",
+				},
+			},
+			{
+				Permission: "CLOSE_ISSUES",
+				Holder: &jira.PermissionGrantHolderScheme{
+					Type: "assignee",
+				},
+			},
+		},
+	}
+
+	permissionScheme, response, err := atlassian.Permission.Scheme.Create(context.Background(), payload)
+
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+	log.Println(permissionScheme)
+}
diff --git a/jira/examples/permission-scheme/delete/delete.go b/jira/examples/permission-scheme/delete/delete.go
new file mode 100644
index 0000000..bc51817
--- /dev/null
+++ b/jira/examples/permission-scheme/delete/delete.go
@@ -0,0 +1,45 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	var permissionSchemeID = 10004
+	response, err := atlassian.Permission.Scheme.Delete(context.Background(), permissionSchemeID)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+}
diff --git a/jira/examples/permission-scheme/get/get.go b/jira/examples/permission-scheme/get/get.go
new file mode 100644
index 0000000..1e4b137
--- /dev/null
+++ b/jira/examples/permission-scheme/get/get.go
@@ -0,0 +1,46 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	var permissionSchemeID = 10001
+	permissionScheme, response, err := atlassian.Permission.Scheme.Get(context.Background(), permissionSchemeID)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+	log.Println(permissionScheme)
+}
diff --git a/jira/examples/permission-scheme/gets/gets.go b/jira/examples/permission-scheme/gets/gets.go
new file mode 100644
index 0000000..aa8f343
--- /dev/null
+++ b/jira/examples/permission-scheme/gets/gets.go
@@ -0,0 +1,48 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	permissionSchemes, response, err := atlassian.Permission.Scheme.Gets(context.Background())
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+	for _, permissionScheme := range permissionSchemes.PermissionSchemes {
+		log.Println(permissionScheme.ID, permissionScheme.Name)
+	}
+}
diff --git a/jira/examples/permission-scheme/update/update.go b/jira/examples/permission-scheme/update/update.go
new file mode 100644
index 0000000..d9f69e6
--- /dev/null
+++ b/jira/examples/permission-scheme/update/update.go
@@ -0,0 +1,69 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	payload := &jira.PermissionSchemeScheme{
+		Name:        "EF Permission Scheme - UPDATED",
+		Description: "EF Permission Scheme description - UPDATED",
+
+		Permissions: []*jira.PermissionGrantScheme{
+			{
+				Permission: "CLOSE_ISSUES",
+				Holder: &jira.PermissionGrantHolderScheme{
+					Parameter: "jira-administrators-system",
+					Type:      "group",
+				},
+			},
+		},
+	}
+
+	permissionScheme, response, err := atlassian.Permission.Scheme.Update(context.Background(), 10004, payload)
+
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+	log.Println(permissionScheme.Name)
+	log.Println(permissionScheme.ID)
+	log.Println(permissionScheme.Description)
+	log.Println(permissionScheme.Self)
+
+	for _, permissionGrant := range permissionScheme.Permissions {
+		log.Println(permissionGrant.ID, permissionGrant.Permission)
+	}
+}
diff --git a/jira/examples/project-component/count/count.go b/jira/examples/project-component/count/count.go
new file mode 100644
index 0000000..a3c2773
--- /dev/null
+++ b/jira/examples/project-component/count/count.go
@@ -0,0 +1,43 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	count, response, err := atlassian.Project.Component.Count(context.Background(), "10005")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println(count)
+}
diff --git a/jira/examples/project-component/create/create.go b/jira/examples/project-component/create/create.go
new file mode 100644
index 0000000..f3534e2
--- /dev/null
+++ b/jira/examples/project-component/create/create.go
@@ -0,0 +1,54 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	payload := &jira.ProjectComponentPayloadScheme{
+		IsAssigneeTypeValid: false,
+		Name:                "Component 2",
+		Description:         "This is a Jira component",
+		Project:             "KP",
+		AssigneeType:        "PROJECT_LEAD",
+		LeadAccountID:       "5b86be50b8e3cb5895860d6d",
+	}
+
+	newComponent, response, err := atlassian.Project.Component.Create(context.Background(), payload)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+	log.Printf("The new component has been created with the ID %v", newComponent.ID)
+}
diff --git a/jira/examples/project-component/delete/delete.go b/jira/examples/project-component/delete/delete.go
new file mode 100644
index 0000000..c70041f
--- /dev/null
+++ b/jira/examples/project-component/delete/delete.go
@@ -0,0 +1,44 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	response, err := atlassian.Project.Component.Delete(context.Background(), "10006")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+}
diff --git a/jira/examples/project-component/get/get.go b/jira/examples/project-component/get/get.go
new file mode 100644
index 0000000..6a915df
--- /dev/null
+++ b/jira/examples/project-component/get/get.go
@@ -0,0 +1,43 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	component, response, err := atlassian.Project.Component.Get(context.Background(), "10006")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println(component)
+}
diff --git a/jira/examples/project-component/gets/gets.go b/jira/examples/project-component/gets/gets.go
new file mode 100644
index 0000000..81e3b56
--- /dev/null
+++ b/jira/examples/project-component/gets/gets.go
@@ -0,0 +1,46 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	var projectKey = "KP"
+	components, response, err := atlassian.Project.Component.Gets(context.Background(), projectKey)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	for _, component := range *components {
+		log.Println(component)
+	}
+}
diff --git a/jira/examples/project-component/update/update.go b/jira/examples/project-component/update/update.go
new file mode 100644
index 0000000..10e30d3
--- /dev/null
+++ b/jira/examples/project-component/update/update.go
@@ -0,0 +1,49 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	payload := &jira.ProjectComponentPayloadScheme{
+		IsAssigneeTypeValid: false,
+		Name:                "Component 1 - UPDATED",
+		Description:         "This is a Jira component - UPDATED",
+	}
+
+	componentUpdated, response, err := atlassian.Project.Component.Update(context.Background(), "10006", payload)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println(componentUpdated)
+}
diff --git a/jira/examples/project-permission-scheme/assign/assign.go b/jira/examples/project-permission-scheme/assign/assign.go
new file mode 100644
index 0000000..5ed4e80
--- /dev/null
+++ b/jira/examples/project-permission-scheme/assign/assign.go
@@ -0,0 +1,50 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	var (
+		projectKeyOrID     = "KP"
+		permissionSchemeID = 10000
+	)
+
+	scheme, response, err := atlassian.Project.Permission.Assign(context.Background(), projectKeyOrID, permissionSchemeID)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+	log.Println(scheme)
+}
diff --git a/jira/examples/project-permission-scheme/get/get.go b/jira/examples/project-permission-scheme/get/get.go
new file mode 100644
index 0000000..6bab631
--- /dev/null
+++ b/jira/examples/project-permission-scheme/get/get.go
@@ -0,0 +1,45 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	scheme, response, err := atlassian.Project.Permission.Get(context.Background(), "KP", []string{"all"})
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+	log.Println(scheme)
+}
diff --git a/jira/examples/project-permission-scheme/security-levels/security-levels.go b/jira/examples/project-permission-scheme/security-levels/security-levels.go
new file mode 100644
index 0000000..a2d9215
--- /dev/null
+++ b/jira/examples/project-permission-scheme/security-levels/security-levels.go
@@ -0,0 +1,48 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	levels, response, err := atlassian.Project.Permission.SecurityLevels(context.Background(), "KP")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+	for _, level := range levels.Levels {
+		log.Println(level)
+	}
+}
diff --git a/jira/examples/project-role/create/create.go b/jira/examples/project-role/create/create.go
new file mode 100644
index 0000000..71d78c4
--- /dev/null
+++ b/jira/examples/project-role/create/create.go
@@ -0,0 +1,45 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	newRole, response, err := atlassian.Project.Role.Create(context.Background(), "Developers", "A project role that represents developers in a project")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+	log.Println(newRole)
+}
diff --git a/jira/examples/project-role/details/details.go b/jira/examples/project-role/details/details.go
new file mode 100644
index 0000000..30ffa9c
--- /dev/null
+++ b/jira/examples/project-role/details/details.go
@@ -0,0 +1,52 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	rolesDetails, response, err := atlassian.Project.Role.Details(context.Background(), "KP")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+	for _, role := range *rolesDetails {
+
+		log.Println(role.Name)
+		log.Println(role.ID)
+		log.Println(role.Admin)
+		log.Println(role.TranslatedName)
+	}
+}
diff --git a/jira/examples/project-role/get/get.go b/jira/examples/project-role/get/get.go
new file mode 100644
index 0000000..baa7783
--- /dev/null
+++ b/jira/examples/project-role/get/get.go
@@ -0,0 +1,49 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	role, response, err := atlassian.Project.Role.Get(context.Background(), "KP", 10005)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+	log.Println(role.ID)
+	log.Println(role.Name)
+	log.Println(role.Description)
+	log.Println(role.Self)
+}
diff --git a/jira/examples/project-role/gets/gets.go b/jira/examples/project-role/gets/gets.go
new file mode 100644
index 0000000..c5b8595
--- /dev/null
+++ b/jira/examples/project-role/gets/gets.go
@@ -0,0 +1,48 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	roles, response, err := atlassian.Project.Role.Gets(context.Background(), "KP")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+	for key, value := range *roles {
+		log.Println(key, value)
+	}
+}
diff --git a/jira/examples/project-role/global/global.go b/jira/examples/project-role/global/global.go
new file mode 100644
index 0000000..a9ab7d6
--- /dev/null
+++ b/jira/examples/project-role/global/global.go
@@ -0,0 +1,48 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	roles, response, err := atlassian.Project.Role.Global(context.Background())
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+	for _, role := range *roles {
+		log.Println(role)
+	}
+}
diff --git a/jira/examples/project/archive/archive.go b/jira/examples/project/archive/archive.go
new file mode 100644
index 0000000..5cf84b2
--- /dev/null
+++ b/jira/examples/project/archive/archive.go
@@ -0,0 +1,44 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	response, err := atlassian.Project.Archive(context.Background(), "PK")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+}
diff --git a/jira/examples/project/create/create.go b/jira/examples/project/create/create.go
new file mode 100644
index 0000000..af8a9db
--- /dev/null
+++ b/jira/examples/project/create/create.go
@@ -0,0 +1,66 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	payload := &jira.ProjectPayloadScheme{
+		NotificationScheme:  10021,
+		Description:         "Example Project description",
+		LeadAccountID:       "5b86be50b8e3cb5895860d6d",
+		URL:                 "http://atlassian.com",
+		ProjectTemplateKey:  "com.pyxis.greenhopper.jira:gh-simplified-agility-kanban",
+		AvatarID:            10200,
+		IssueSecurityScheme: 10001,
+		Name:                "Project DUMMY #3",
+		PermissionScheme:    10011,
+		AssigneeType:        "PROJECT_LEAD",
+		ProjectTypeKey:      "software",
+		Key:                 "DUMMY3",
+		CategoryID:          10120,
+	}
+
+	newProject, response, err := atlassian.Project.Create(context.Background(), payload)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+	log.Println("-------------------")
+	log.Println(newProject.ID)
+	log.Println(newProject.Self)
+	log.Println(newProject.Key)
+	log.Println("-------------------")
+}
diff --git a/jira/examples/project/delete/delete.go b/jira/examples/project/delete/delete.go
new file mode 100644
index 0000000..a60ccdd
--- /dev/null
+++ b/jira/examples/project/delete/delete.go
@@ -0,0 +1,36 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	jiraCloud, err := jira.New(nil, host)
+	if err != nil {
+		return
+	}
+
+	jiraCloud.Auth.SetBasicAuth(mail, token)
+	jiraCloud.Auth.SetUserAgent("curl/7.54.0")
+
+	response, err := jiraCloud.Project.Delete(context.Background(), "DUM", true)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+}
diff --git a/jira/examples/project/deleteAsynchronously/deleteAsynchronously.go b/jira/examples/project/deleteAsynchronously/deleteAsynchronously.go
new file mode 100644
index 0000000..8b82f84
--- /dev/null
+++ b/jira/examples/project/deleteAsynchronously/deleteAsynchronously.go
@@ -0,0 +1,38 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	jiraCloud, err := jira.New(nil, host)
+	if err != nil {
+		return
+	}
+
+	jiraCloud.Auth.SetBasicAuth(mail, token)
+	jiraCloud.Auth.SetUserAgent("curl/7.54.0")
+
+	task, response, err := jiraCloud.Project.DeleteAsynchronously(context.Background(), "DUM")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+	log.Println(task.ID)
+	log.Println(task)
+}
diff --git a/jira/examples/project/get/get.go b/jira/examples/project/get/get.go
new file mode 100644
index 0000000..7fced81
--- /dev/null
+++ b/jira/examples/project/get/get.go
@@ -0,0 +1,49 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	project, response, err := atlassian.Project.Get(context.Background(), "KP", []string{"issueTypes"})
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+	log.Println(project)
+
+	for _, issueType := range project.IssueTypes {
+		log.Println(issueType.Name)
+	}
+}
diff --git a/jira/examples/project/notificationScheme/notificationScheme.go b/jira/examples/project/notificationScheme/notificationScheme.go
new file mode 100644
index 0000000..b28fe32
--- /dev/null
+++ b/jira/examples/project/notificationScheme/notificationScheme.go
@@ -0,0 +1,57 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	notificationScheme, response, err := atlassian.Project.NotificationScheme(context.Background(), "KP", []string{"all"})
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+	log.Println(notificationScheme)
+
+	log.Println(notificationScheme.Name, notificationScheme.ID)
+
+	for _, event := range notificationScheme.NotificationSchemeEvents {
+
+		log.Println(event.Event.ID, event.Event.Name)
+
+		for index, notification := range event.Notifications {
+			log.Println(index, event.Event.Name, notification.ID, notification.NotificationType, notification.Parameter)
+		}
+
+	}
+}
diff --git a/jira/examples/project/restore/restore.go b/jira/examples/project/restore/restore.go
new file mode 100644
index 0000000..aeae14a
--- /dev/null
+++ b/jira/examples/project/restore/restore.go
@@ -0,0 +1,38 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	jiraCloud, err := jira.New(nil, host)
+	if err != nil {
+		return
+	}
+
+	jiraCloud.Auth.SetBasicAuth(mail, token)
+	jiraCloud.Auth.SetUserAgent("curl/7.54.0")
+
+	projectRestored, response, err := jiraCloud.Project.Restore(context.Background(), "DUM")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+	log.Println(projectRestored)
+
+}
diff --git a/jira/examples/project/search/search.go b/jira/examples/project/search/search.go
new file mode 100644
index 0000000..6644c50
--- /dev/null
+++ b/jira/examples/project/search/search.go
@@ -0,0 +1,59 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	options := &jira.ProjectSearchOptionsScheme{
+		OrderBy: "issueCount",
+		Action:  "browse",
+		Expand:  []string{"insight", "lead", "issueTypes", "projectKeys", "description"},
+	}
+
+	var (
+		startAt    = 0
+		maxResults = 50
+	)
+
+	projects, response, err := atlassian.Project.Search(context.Background(), options, startAt, maxResults)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+	for _, project := range projects.Values {
+		log.Println(project)
+	}
+}
diff --git a/jira/examples/project/statuses/statuses.go b/jira/examples/project/statuses/statuses.go
new file mode 100644
index 0000000..8cb0c6e
--- /dev/null
+++ b/jira/examples/project/statuses/statuses.go
@@ -0,0 +1,48 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	statuses, response, err := atlassian.Project.Statuses(context.Background(), "KP")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+	for _, status := range *statuses {
+		log.Println(status)
+	}
+}
diff --git a/jira/examples/project/update/update.go b/jira/examples/project/update/update.go
new file mode 100644
index 0000000..d9faf8b
--- /dev/null
+++ b/jira/examples/project/update/update.go
@@ -0,0 +1,49 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	payload := &jira.ProjectUpdateScheme{
+		Description: "Example Project description",
+	}
+
+	projectUpdated, response, err := atlassian.Project.Update(context.Background(), "KP", payload)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+	log.Println(projectUpdated)
+}
diff --git a/jira/examples/user/create/create.go b/jira/examples/user/create/create.go
new file mode 100644
index 0000000..8b2e22b
--- /dev/null
+++ b/jira/examples/user/create/create.go
@@ -0,0 +1,51 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	payload := &jira.UserPayloadScheme{
+		EmailAddress: "example1@go-atlassian.io",
+		DisplayName:  "Example DisplayName",
+		Notification: false,
+	}
+
+	newUser, response, err := atlassian.User.Create(context.Background(), payload)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+	log.Println("The new user has been created", newUser.AccountID)
+}
diff --git a/jira/examples/user/delete/delete.go b/jira/examples/user/delete/delete.go
new file mode 100644
index 0000000..ab3cbb7
--- /dev/null
+++ b/jira/examples/user/delete/delete.go
@@ -0,0 +1,45 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	response, err := atlassian.User.Delete(context.Background(), "607b98df2ad11c0072664322")
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+}
diff --git a/jira/examples/user/find/find.go b/jira/examples/user/find/find.go
new file mode 100644
index 0000000..c1802e2
--- /dev/null
+++ b/jira/examples/user/find/find.go
@@ -0,0 +1,55 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	var (
+		accountIDs = []string{"5b86be50b8e3cb5895860d6d"}
+		startAt    = 0
+		maxResults = 50
+	)
+
+	users, response, err := atlassian.User.Find(context.Background(), accountIDs, startAt, maxResults)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+	for _, user := range users.Values {
+		log.Println(user.DisplayName)
+	}
+
+}
diff --git a/jira/examples/user/get/get.go b/jira/examples/user/get/get.go
new file mode 100644
index 0000000..17dc6d8
--- /dev/null
+++ b/jira/examples/user/get/get.go
@@ -0,0 +1,51 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	var (
+		accountID = "5b86be50b8e3cb5895860d6d"
+		expands   = []string{"groups", "applicationRoles"}
+	)
+
+	user, response, err := atlassian.User.Get(context.Background(), accountID, expands)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+	log.Println(user)
+
+}
diff --git a/jira/examples/user/gets/gets.go b/jira/examples/user/gets/gets.go
new file mode 100644
index 0000000..cce2f59
--- /dev/null
+++ b/jira/examples/user/gets/gets.go
@@ -0,0 +1,54 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	var (
+		startAt    = 0
+		maxResults = 50
+	)
+
+	users, response, err := atlassian.User.Gets(context.Background(), startAt, maxResults)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+	for _, user := range *users {
+		log.Println(user)
+	}
+
+}
diff --git a/jira/examples/user/groups/groups.go b/jira/examples/user/groups/groups.go
new file mode 100644
index 0000000..9aba622
--- /dev/null
+++ b/jira/examples/user/groups/groups.go
@@ -0,0 +1,50 @@
+package main
+
+import (
+	"context"
+	"github.com/ctreminiom/go-atlassian/jira"
+	"log"
+	"os"
+)
+
+func main() {
+
+	/*
+		----------- Set an environment variable in git bash -----------
+		export HOST="https://ctreminiom.atlassian.net/"
+		export MAIL="MAIL_ADDRESS"
+		export TOKEN="TOKEN_API"
+
+		Docs: https://stackoverflow.com/questions/34169721/set-an-environment-variable-in-git-bash
+	*/
+
+	var (
+		host  = os.Getenv("HOST")
+		mail  = os.Getenv("MAIL")
+		token = os.Getenv("TOKEN")
+	)
+
+	atlassian, err := jira.New(nil, host)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	atlassian.Auth.SetBasicAuth(mail, token)
+
+	var accountID = "5b86be50b8e3cb5895860d6d"
+	groups, response, err := atlassian.User.Groups(context.Background(), accountID)
+	if err != nil {
+		if response != nil {
+			log.Println("Response HTTP Response", string(response.BodyAsBytes))
+		}
+		log.Fatal(err)
+	}
+
+	log.Println("Response HTTP Code", response.StatusCode)
+	log.Println("HTTP Endpoint Used", response.Endpoint)
+
+	for _, group := range *groups {
+		log.Println(group)
+	}
+
+}
diff --git a/jira/issueField.go b/jira/issueField.go
index bea845b..54f2125 100644
--- a/jira/issueField.go
+++ b/jira/issueField.go
@@ -16,22 +16,22 @@ type FieldService struct {
 }
 
 type IssueFieldScheme struct {
-	ID            string                    `json:"id,omitempty"`
-	Key           string                    `json:"key,omitempty"`
-	Name          string                    `json:"name,omitempty"`
-	Custom        bool                      `json:"custom,omitempty"`
-	Orderable     bool                      `json:"orderable,omitempty"`
-	Navigable     bool                      `json:"navigable,omitempty"`
-	Searchable    bool                      `json:"searchable,omitempty"`
-	ClauseNames   []string                  `json:"clauseNames,omitempty"`
-	Scope         *IssueFieldScopeScheme    `json:"scope,omitempty"`
-	Schema        *IssueFieldSchemaScheme   `json:"schema,omitempty"`
-	Description   string                    `json:"description,omitempty"`
-	IsLocked      bool                      `json:"isLocked,omitempty"`
-	SearcherKey   string                    `json:"searcherKey,omitempty"`
-	ScreensCount  int                       `json:"screensCount,omitempty"`
-	ContextsCount int                       `json:"contextsCount,omitempty"`
-	LastUsed      *IssueFieldLastUsedScheme `json:"lastUsed,omitempty"`
+	ID            string                         `json:"id,omitempty"`
+	Key           string                         `json:"key,omitempty"`
+	Name          string                         `json:"name,omitempty"`
+	Custom        bool                           `json:"custom,omitempty"`
+	Orderable     bool                           `json:"orderable,omitempty"`
+	Navigable     bool                           `json:"navigable,omitempty"`
+	Searchable    bool                           `json:"searchable,omitempty"`
+	ClauseNames   []string                       `json:"clauseNames,omitempty"`
+	Scope         *TeamManagedProjectScopeScheme `json:"scope,omitempty"`
+	Schema        *IssueFieldSchemaScheme        `json:"schema,omitempty"`
+	Description   string                         `json:"description,omitempty"`
+	IsLocked      bool                           `json:"isLocked,omitempty"`
+	SearcherKey   string                         `json:"searcherKey,omitempty"`
+	ScreensCount  int                            `json:"screensCount,omitempty"`
+	ContextsCount int                            `json:"contextsCount,omitempty"`
+	LastUsed      *IssueFieldLastUsedScheme      `json:"lastUsed,omitempty"`
 }
 
 type IssueFieldLastUsedScheme struct {
@@ -39,7 +39,7 @@ type IssueFieldLastUsedScheme struct {
 	Value string `json:"value,omitempty"`
 }
 
-type IssueFieldScopeScheme struct {
+type TeamManagedProjectScopeScheme struct {
 	Type    string         `json:"type,omitempty"`
 	Project *ProjectScheme `json:"project,omitempty"`
 }
diff --git a/jira/issueVote.go b/jira/issueVote.go
index 7ee1f5c..9892bd5 100644
--- a/jira/issueVote.go
+++ b/jira/issueVote.go
@@ -10,23 +10,10 @@ import (
 type VoteService struct{ client *Client }
 
 type IssueVoteScheme struct {
-	Self     string `json:"self,omitempty"`
-	Votes    int    `json:"votes,omitempty"`
-	HasVoted bool   `json:"hasVoted,omitempty"`
-	Voters   []struct {
-		Self       string `json:"self,omitempty"`
-		Key        string `json:"key,omitempty"`
-		AccountID  string `json:"accountId,omitempty"`
-		Name       string `json:"name,omitempty"`
-		AvatarUrls struct {
-			Four8X48  string `json:"48x48,omitempty"`
-			Two4X24   string `json:"24x24,omitempty"`
-			One6X16   string `json:"16x16,omitempty"`
-			Three2X32 string `json:"32x32,omitempty"`
-		} `json:"avatarUrls,omitempty"`
-		DisplayName string `json:"displayName,omitempty"`
-		Active      bool   `json:"active,omitempty"`
-	} `json:"voters,omitempty"`
+	Self     string        `json:"self,omitempty"`
+	Votes    int           `json:"votes,omitempty"`
+	HasVoted bool          `json:"hasVoted,omitempty"`
+	Voters   []*UserScheme `json:"voters,omitempty"`
 }
 
 // Returns details about the votes on an issue.
diff --git a/jira/issueWatcher.go b/jira/issueWatcher.go
index 9422b4a..e10a854 100644
--- a/jira/issueWatcher.go
+++ b/jira/issueWatcher.go
@@ -11,20 +11,37 @@ import (
 type WatcherService struct{ client *Client }
 
 type IssueWatcherScheme struct {
-	Self       string `json:"self,omitempty"`
-	IsWatching bool   `json:"isWatching,omitempty"`
-	WatchCount int    `json:"watchCount,omitempty"`
-	Watchers   []struct {
-		Self        string `json:"self,omitempty"`
-		AccountID   string `json:"accountId,omitempty"`
-		DisplayName string `json:"displayName,omitempty"`
-		Active      bool   `json:"active,omitempty"`
-	} `json:"watchers,omitempty"`
+	Self       string               `json:"self,omitempty"`
+	IsWatching bool                 `json:"isWatching,omitempty"`
+	WatchCount int                  `json:"watchCount,omitempty"`
+	Watchers   []*IssueDetailScheme `json:"watchers,omitempty"`
+}
+
+type IssueDetailScheme struct {
+	Self         string `json:"self,omitempty"`
+	Name         string `json:"name,omitempty"`
+	Key          string `json:"key,omitempty"`
+	AccountID    string `json:"accountId,omitempty"`
+	EmailAddress string `json:"emailAddress,omitempty"`
+	AvatarUrls   struct {
+		One6X16   string `json:"16x16,omitempty"`
+		Two4X24   string `json:"24x24,omitempty"`
+		Three2X32 string `json:"32x32,omitempty"`
+		Four8X48  string `json:"48x48,omitempty"`
+	} `json:"avatarUrls,omitempty"`
+	DisplayName string `json:"displayName,omitempty"`
+	Active      bool   `json:"active,omitempty"`
+	TimeZone    string `json:"timeZone,omitempty"`
+	AccountType string `json:"accountType,omitempty"`
 }
 
 // Returns the watchers for an issue.
 // Docs: https://docs.go-atlassian.io/jira-software-cloud/issues/watcher#get-issue-watchers
-func (w *WatcherService) Get(ctx context.Context, issueKeyOrID string) (result *IssueWatcherScheme, response *Response, err error) {
+func (w *WatcherService) Gets(ctx context.Context, issueKeyOrID string) (result *IssueWatcherScheme, response *Response, err error) {
+
+	if len(issueKeyOrID) == 0 {
+		return nil, nil, fmt.Errorf("error!, please provide a valid issueKeyOrID value")
+	}
 
 	var endpoint = fmt.Sprintf("rest/api/3/issue/%v/watchers", issueKeyOrID)
 
@@ -52,6 +69,10 @@ func (w *WatcherService) Get(ctx context.Context, issueKeyOrID string) (result *
 // Docs: https://docs.go-atlassian.io/jira-software-cloud/issues/watcher#add-watcher
 func (w *WatcherService) Add(ctx context.Context, issueKeyOrID string) (response *Response, err error) {
 
+	if len(issueKeyOrID) == 0 {
+		return nil, fmt.Errorf("error!, please provide a valid issueKeyOrID value")
+	}
+
 	var endpoint = fmt.Sprintf("rest/api/3/issue/%v/watchers", issueKeyOrID)
 
 	request, err := w.client.newRequest(ctx, http.MethodPost, endpoint, nil)
@@ -74,6 +95,14 @@ func (w *WatcherService) Add(ctx context.Context, issueKeyOrID string) (response
 // Docs: https://docs.go-atlassian.io/jira-software-cloud/issues/watcher#delete-watcher
 func (w *WatcherService) Delete(ctx context.Context, issueKeyOrID, accountID string) (response *Response, err error) {
 
+	if len(issueKeyOrID) == 0 {
+		return nil, fmt.Errorf("error!, please provide a valid issueKeyOrID value")
+	}
+
+	if len(accountID) == 0 {
+		return nil, fmt.Errorf("error!, please provide a valid accountID value")
+	}
+
 	params := url.Values{}
 	params.Add("accountId", accountID)
 
diff --git a/jira/permissionGrantScheme.go b/jira/permissionGrantScheme.go
index 5948e80..f0b7835 100644
--- a/jira/permissionGrantScheme.go
+++ b/jira/permissionGrantScheme.go
@@ -11,41 +11,36 @@ import (
 type PermissionGrantSchemeService struct{ client *Client }
 
 type PermissionSchemeGrantsScheme struct {
-	Permissions []PermissionGrantScheme `json:"permissions"`
-	Expand      string                  `json:"expand"`
+	Permissions []*PermissionGrantScheme `json:"permissions,omitempty"`
+	Expand      string                   `json:"expand,omitempty"`
 }
 
 type PermissionGrantScheme struct {
-	ID     int    `json:"id"`
-	Self   string `json:"self"`
-	Holder struct {
-		Type        string `json:"type"`
-		Parameter   string `json:"parameter"`
-		ProjectRole struct {
-			Self        string `json:"self"`
-			Name        string `json:"name"`
-			ID          int    `json:"id"`
-			Description string `json:"description"`
-		} `json:"projectRole"`
-		Expand string `json:"expand"`
-	} `json:"holder"`
-	Permission string `json:"permission"`
+	ID         int                          `json:"id,omitempty"`
+	Self       string                       `json:"self,omitempty"`
+	Holder     *PermissionGrantHolderScheme `json:"holder,omitempty"`
+	Permission string                       `json:"permission,omitempty"`
 }
 
-type PermissionGrantPayloadScheme struct {
-	Holder     *PermissionGrantHolderPayloadScheme `json:"holder,omitempty"`
-	Permission string                              `json:"permission,omitempty"`
+type PermissionGrantHolderScheme struct {
+	Type      string `json:"type,omitempty"`
+	Parameter string `json:"parameter,omitempty"`
+	Expand    string `json:"expand,omitempty"`
 }
 
-type PermissionGrantHolderPayloadScheme struct {
-	Parameter string `json:"parameter,omitempty"`
-	Type      string `json:"type,omitempty"`
+type PermissionGrantPayloadScheme struct {
+	Holder     *PermissionGrantHolderScheme `json:"holder,omitempty"`
+	Permission string                       `json:"permission,omitempty"`
 }
 
 // Creates a permission grant in a permission scheme.
 // Docs: https://docs.go-atlassian.io/jira-software-cloud/permissions/scheme/grant#create-permission-grant
 func (p *PermissionGrantSchemeService) Create(ctx context.Context, schemeID int, payload *PermissionGrantPayloadScheme) (result *PermissionGrantScheme, response *Response, err error) {
 
+	if schemeID == 0 {
+		return nil, nil, fmt.Errorf("error, please provide a schemeID value")
+	}
+
 	if payload == nil {
 		return nil, nil, fmt.Errorf("error, please provide a PermissionGrantPayloadScheme pointer")
 	}
@@ -77,8 +72,11 @@ func (p *PermissionGrantSchemeService) Create(ctx context.Context, schemeID int,
 // Docs: https://docs.go-atlassian.io/jira-software-cloud/permissions/scheme/grant#get-permission-scheme-grants
 func (p *PermissionGrantSchemeService) Gets(ctx context.Context, permissionSchemeID int, expands []string) (result *PermissionSchemeGrantsScheme, response *Response, err error) {
 
-	params := url.Values{}
+	if permissionSchemeID == 0 {
+		return nil, nil, fmt.Errorf("error, please provide a permissionSchemeID value")
+	}
 
+	params := url.Values{}
 	var expand string
 	for index, value := range expands {
 
@@ -125,6 +123,14 @@ func (p *PermissionGrantSchemeService) Gets(ctx context.Context, permissionSchem
 // Docs: https://docs.go-atlassian.io/jira-software-cloud/permissions/scheme/grant#get-permission-scheme-grant
 func (p *PermissionGrantSchemeService) Get(ctx context.Context, schemeID, permissionID int, expands []string) (result *PermissionGrantScheme, response *Response, err error) {
 
+	if schemeID == 0 {
+		return nil, nil, fmt.Errorf("error, please provide a schemeID value")
+	}
+
+	if permissionID == 0 {
+		return nil, nil, fmt.Errorf("error, please provide a permissionID value")
+	}
+
 	params := url.Values{}
 
 	var expand string
@@ -174,6 +180,14 @@ func (p *PermissionGrantSchemeService) Get(ctx context.Context, schemeID, permis
 // Docs: https://docs.go-atlassian.io/jira-software-cloud/permissions/scheme/grant#delete-permission-scheme-grant
 func (p *PermissionGrantSchemeService) Delete(ctx context.Context, schemeID, permissionID int) (response *Response, err error) {
 
+	if schemeID == 0 {
+		return nil, fmt.Errorf("error, please provide a schemeID value")
+	}
+
+	if permissionID == 0 {
+		return nil, fmt.Errorf("error, please provide a permissionID value")
+	}
+
 	var endpoint = fmt.Sprintf("rest/api/3/permissionscheme/%v/permission/%v", schemeID, permissionID)
 
 	request, err := p.client.newRequest(ctx, http.MethodDelete, endpoint, nil)
diff --git a/jira/permissionScheme.go b/jira/permissionScheme.go
index a0a0e1f..2b6adab 100644
--- a/jira/permissionScheme.go
+++ b/jira/permissionScheme.go
@@ -12,13 +12,13 @@ type PermissionSchemeService struct {
 	Grant  *PermissionGrantSchemeService
 }
 
-type PermissionSchemesScheme struct {
-	PermissionSchemes []PermissionScheme `json:"permissionSchemes"`
+type PermissionSchemePageScheme struct {
+	PermissionSchemes []*PermissionSchemeScheme `json:"permissionSchemes,omitempty"`
 }
 
 // Returns all permission schemes.
 // Docs: https://docs.go-atlassian.io/jira-software-cloud/permissions/scheme#get-all-permission-schemes
-func (p *PermissionSchemeService) Gets(ctx context.Context) (result *PermissionSchemesScheme, response *Response, err error) {
+func (p *PermissionSchemeService) Gets(ctx context.Context) (result *PermissionSchemePageScheme, response *Response, err error) {
 
 	var endpoint = "rest/api/3/permissionscheme"
 
@@ -26,6 +26,7 @@ func (p *PermissionSchemeService) Gets(ctx context.Context) (result *PermissionS
 	if err != nil {
 		return
 	}
+
 	request.Header.Set("Accept", "application/json")
 
 	response, err = p.client.Do(request)
@@ -33,7 +34,7 @@ func (p *PermissionSchemeService) Gets(ctx context.Context) (result *PermissionS
 		return
 	}
 
-	result = new(PermissionSchemesScheme)
+	result = new(PermissionSchemePageScheme)
 	if err = json.Unmarshal(response.BodyAsBytes, &result); err != nil {
 		return
 	}
@@ -41,26 +42,33 @@ func (p *PermissionSchemeService) Gets(ctx context.Context) (result *PermissionS
 	return
 }
 
-type PermissionScheme struct {
-	ID          int    `json:"id"`
-	Self        string `json:"self"`
-	Name        string `json:"name"`
-	Description string `json:"description"`
-	Permissions []struct {
-		ID     int    `json:"id"`
-		Self   string `json:"self"`
-		Holder struct {
-			Type      string `json:"type"`
-			Parameter string `json:"parameter"`
-			Expand    string `json:"expand"`
-		} `json:"holder"`
-		Permission string `json:"permission"`
-	} `json:"permissions"`
+type PermissionSchemeScheme struct {
+	Expand      string                         `json:"expand,omitempty"`
+	ID          int                            `json:"id,omitempty"`
+	Self        string                         `json:"self,omitempty"`
+	Name        string                         `json:"name,omitempty"`
+	Description string                         `json:"description,omitempty"`
+	Permissions []*PermissionGrantScheme       `json:"permissions,omitempty"`
+	Scope       *TeamManagedProjectScopeScheme `json:"scope,omitempty"`
+}
+
+type PermissionScopeItemScheme struct {
+	Self            string                 `json:"self,omitempty"`
+	ID              string                 `json:"id,omitempty"`
+	Key             string                 `json:"key,omitempty"`
+	Name            string                 `json:"name,omitempty"`
+	ProjectTypeKey  string                 `json:"projectTypeKey,omitempty"`
+	Simplified      bool                   `json:"simplified,omitempty"`
+	ProjectCategory *ProjectCategoryScheme `json:"projectCategory,omitempty"`
 }
 
 // Returns a permission scheme.
 // Docs: https://docs.go-atlassian.io/jira-software-cloud/permissions/scheme#get-permission-scheme
-func (p *PermissionSchemeService) Get(ctx context.Context, permissionSchemeID int) (result *PermissionScheme, response *Response, err error) {
+func (p *PermissionSchemeService) Get(ctx context.Context, permissionSchemeID int) (result *PermissionSchemeScheme, response *Response, err error) {
+
+	if permissionSchemeID == 0 {
+		return nil, nil, fmt.Errorf("error!, please provide a valid permissionSchemeID value")
+	}
 
 	var endpoint = fmt.Sprintf("rest/api/3/permissionscheme/%v", permissionSchemeID)
 
@@ -68,6 +76,7 @@ func (p *PermissionSchemeService) Get(ctx context.Context, permissionSchemeID in
 	if err != nil {
 		return
 	}
+
 	request.Header.Set("Accept", "application/json")
 
 	response, err = p.client.Do(request)
@@ -75,7 +84,7 @@ func (p *PermissionSchemeService) Get(ctx context.Context, permissionSchemeID in
 		return
 	}
 
-	result = new(PermissionScheme)
+	result = new(PermissionSchemeScheme)
 	if err = json.Unmarshal(response.BodyAsBytes, &result); err != nil {
 		return
 	}
@@ -87,13 +96,16 @@ func (p *PermissionSchemeService) Get(ctx context.Context, permissionSchemeID in
 // Docs: https://docs.go-atlassian.io/jira-software-cloud/permissions/scheme#delete-permission-scheme
 func (p *PermissionSchemeService) Delete(ctx context.Context, permissionSchemeID int) (response *Response, err error) {
 
+	if permissionSchemeID == 0 {
+		return nil, fmt.Errorf("error!, please provide a valid permissionSchemeID value")
+	}
+
 	var endpoint = fmt.Sprintf("rest/api/3/permissionscheme/%v", permissionSchemeID)
 
 	request, err := p.client.newRequest(ctx, http.MethodDelete, endpoint, nil)
 	if err != nil {
 		return
 	}
-	request.Header.Set("Accept", "application/json")
 
 	response, err = p.client.Do(request)
 	if err != nil {
@@ -106,24 +118,10 @@ func (p *PermissionSchemeService) Delete(ctx context.Context, permissionSchemeID
 // Creates a new permission scheme.
 // You can create a permission scheme with or without defining a set of permission grants.
 // Docs: https://docs.go-atlassian.io/jira-software-cloud/permissions/scheme#create-permission-scheme
-func (p *PermissionSchemeService) Create(ctx context.Context, name, description string, permissions *[]PermissionGrantPayloadScheme) (result *PermissionScheme, response *Response, err error) {
-
-	if permissions == nil {
-		return nil, nil, fmt.Errorf("error, please provide a PermissionGrantPayloadScheme slice pointer")
-	}
-
-	if len(name) == 0 {
-		return nil, nil, fmt.Errorf("error, please provide a permission scheme name value")
-	}
+func (p *PermissionSchemeService) Create(ctx context.Context, payload *PermissionSchemeScheme) (result *PermissionSchemeScheme, response *Response, err error) {
 
-	payload := struct {
-		Permissions []PermissionGrantPayloadScheme `json:"permissions,omitempty"`
-		Name        string                         `json:"name,omitempty"`
-		Description string                         `json:"description,omitempty"`
-	}{
-		Name:        name,
-		Description: description,
-		Permissions: *permissions,
+	if payload == nil {
+		return nil, nil, fmt.Errorf("error, please provide a PermissionSchemeScheme pointer")
 	}
 
 	var endpoint = "rest/api/3/permissionscheme"
@@ -141,7 +139,7 @@ func (p *PermissionSchemeService) Create(ctx context.Context, name, description
 		return
 	}
 
-	result = new(PermissionScheme)
+	result = new(PermissionSchemeScheme)
 	if err = json.Unmarshal(response.BodyAsBytes, &result); err != nil {
 		return
 	}
@@ -155,20 +153,14 @@ func (p *PermissionSchemeService) Create(ctx context.Context, name, description
 // 2. If you want to update only the name and description, then do not send a permissions list in the request.
 // 3. Sending an empty list will remove all permission grants from the permission scheme.
 // Docs: https://docs.go-atlassian.io/jira-software-cloud/permissions/scheme#update-permission-scheme
-func (p *PermissionSchemeService) Update(ctx context.Context, schemeID int, name, description string, permissions *[]PermissionGrantPayloadScheme) (result *PermissionScheme, response *Response, err error) {
+func (p *PermissionSchemeService) Update(ctx context.Context, schemeID int, payload *PermissionSchemeScheme) (result *PermissionSchemeScheme, response *Response, err error) {
 
-	if permissions == nil {
-		return nil, nil, fmt.Errorf("error, please provide a PermissionGrantPayloadScheme slice pointer")
+	if schemeID == 0 {
+		return nil, nil, fmt.Errorf("error, please provide a valid schemeID value")
 	}
 
-	payload := struct {
-		Permissions []PermissionGrantPayloadScheme `json:"permissions,omitempty"`
-		Name        string                         `json:"name,omitempty"`
-		Description string                         `json:"description,omitempty"`
-	}{
-		Name:        name,
-		Description: description,
-		Permissions: *permissions,
+	if payload == nil {
+		return nil, nil, fmt.Errorf("error, please provide a payload pointer")
 	}
 
 	var endpoint = fmt.Sprintf("rest/api/3/permissionscheme/%v", schemeID)
@@ -186,7 +178,7 @@ func (p *PermissionSchemeService) Update(ctx context.Context, schemeID int, name
 		return
 	}
 
-	result = new(PermissionScheme)
+	result = new(PermissionSchemeScheme)
 	if err = json.Unmarshal(response.BodyAsBytes, &result); err != nil {
 		return
 	}
diff --git a/jira/project.go b/jira/project.go
index 8e23041..103b97d 100644
--- a/jira/project.go
+++ b/jira/project.go
@@ -80,12 +80,13 @@ func (p *ProjectService) Create(ctx context.Context, payload *ProjectPayloadSche
 }
 
 type ProjectSearchScheme struct {
-	Self       string          `json:"self"`
-	MaxResults int             `json:"maxResults"`
-	StartAt    int             `json:"startAt"`
-	Total      int             `json:"total"`
-	IsLast     bool            `json:"isLast"`
-	Values     []ProjectScheme `json:"values"`
+	Self       string           `json:"self,omitempty"`
+	NextPage   string           `json:"nextPage,omitempty"`
+	MaxResults int              `json:"maxResults,omitempty"`
+	StartAt    int              `json:"startAt,omitempty"`
+	Total      int              `json:"total,omitempty"`
+	IsLast     bool             `json:"isLast,omitempty"`
+	Values     []*ProjectScheme `json:"values,omitempty"`
 }
 
 type ProjectSearchOptionsScheme struct {
@@ -101,47 +102,46 @@ type ProjectSearchOptionsScheme struct {
 // Docs: https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-projects/#api-rest-api-3-project-search-get
 func (p *ProjectService) Search(ctx context.Context, opts *ProjectSearchOptionsScheme, startAt, maxResults int) (result *ProjectSearchScheme, response *Response, err error) {
 
-	if opts == nil {
-		return nil, nil, fmt.Errorf("error, please provide a valid ProjectSearchOptionsScheme pointer")
-	}
-
 	params := url.Values{}
 	params.Add("startAt", strconv.Itoa(startAt))
 	params.Add("maxResults", strconv.Itoa(maxResults))
 
-	var expand string
-	for index, value := range opts.Expand {
+	if opts != nil {
 
-		if index == 0 {
-			expand = value
-			continue
-		}
+		var expand string
+		for index, value := range opts.Expand {
 
-		expand += "," + value
-	}
+			if index == 0 {
+				expand = value
+				continue
+			}
 
-	if len(expand) != 0 {
-		params.Add("expand", expand)
-	}
+			expand += "," + value
+		}
 
-	if len(opts.OrderBy) != 0 {
-		params.Add("orderBy", opts.OrderBy)
-	}
+		if len(expand) != 0 {
+			params.Add("expand", expand)
+		}
 
-	if len(opts.Query) != 0 {
-		params.Add("query", opts.Query)
-	}
+		if len(opts.OrderBy) != 0 {
+			params.Add("orderBy", opts.OrderBy)
+		}
 
-	if len(opts.ProjectKeyType) != 0 {
-		params.Add("typeKey", opts.ProjectKeyType)
-	}
+		if len(opts.Query) != 0 {
+			params.Add("query", opts.Query)
+		}
 
-	if opts.CategoryID != 0 {
-		params.Add("categoryId", strconv.Itoa(opts.CategoryID))
-	}
+		if len(opts.ProjectKeyType) != 0 {
+			params.Add("typeKey", opts.ProjectKeyType)
+		}
 
-	if len(opts.Action) != 0 {
-		params.Add("action", opts.Action)
+		if opts.CategoryID != 0 {
+			params.Add("categoryId", strconv.Itoa(opts.CategoryID))
+		}
+
+		if len(opts.Action) != 0 {
+			params.Add("action", opts.Action)
+		}
 	}
 
 	var endpoint = fmt.Sprintf("rest/api/3/project/search?%v", params.Encode())
@@ -166,25 +166,37 @@ func (p *ProjectService) Search(ctx context.Context, opts *ProjectSearchOptionsS
 }
 
 type ProjectScheme struct {
-	Expand         string                    `json:"expand,omitempty"`
-	Self           string                    `json:"self,omitempty"`
-	ID             string                    `json:"id,omitempty"`
-	Key            string                    `json:"key,omitempty"`
-	Description    string                    `json:"description,omitempty"`
-	Lead           *UserScheme               `json:"lead,omitempty"`
-	Components     []*ProjectComponentScheme `json:"components,omitempty"`
-	IssueTypes     []*IssueTypeScheme        `json:"issueTypes,omitempty"`
-	AssigneeType   string                    `json:"assigneeType,omitempty"`
-	Versions       []*ProjectVersionScheme   `json:"versions,omitempty"`
-	Name           string                    `json:"name,omitempty"`
-	Roles          *ProjectRolesScheme       `json:"roles,omitempty"`
-	AvatarUrls     *AvatarURLScheme          `json:"avatarUrls,omitempty"`
-	ProjectKeys    []string                  `json:"projectKeys,omitempty"`
-	ProjectTypeKey string                    `json:"projectTypeKey,omitempty"`
-	Simplified     bool                      `json:"simplified,omitempty"`
-	Style          string                    `json:"style,omitempty"`
-	IsPrivate      bool                      `json:"isPrivate,omitempty"`
-	Insight        *ProjectInsightScheme     `json:"insight,omitempty"`
+	Expand            string                    `json:"expand,omitempty"`
+	Self              string                    `json:"self,omitempty"`
+	ID                string                    `json:"id,omitempty"`
+	Key               string                    `json:"key,omitempty"`
+	Description       string                    `json:"description,omitempty"`
+	URL               string                    `json:"url,omitempty"`
+	Email             string                    `json:"email,omitempty"`
+	AssigneeType      string                    `json:"assigneeType,omitempty"`
+	Name              string                    `json:"name,omitempty"`
+	ProjectTypeKey    string                    `json:"projectTypeKey,omitempty"`
+	Simplified        bool                      `json:"simplified,omitempty"`
+	Style             string                    `json:"style,omitempty"`
+	Favourite         bool                      `json:"favourite,omitempty"`
+	IsPrivate         bool                      `json:"isPrivate,omitempty"`
+	UUID              string                    `json:"uuid,omitempty"`
+	Lead              *UserScheme               `json:"lead,omitempty"`
+	Components        []*ProjectComponentScheme `json:"components,omitempty"`
+	IssueTypes        []*IssueTypeScheme        `json:"issueTypes,omitempty"`
+	Versions          []*ProjectVersionScheme   `json:"versions,omitempty"`
+	Roles             *ProjectRolesScheme       `json:"roles,omitempty"`
+	AvatarUrls        *AvatarURLScheme          `json:"avatarUrls,omitempty"`
+	ProjectKeys       []string                  `json:"projectKeys,omitempty"`
+	Insight           *ProjectInsightScheme     `json:"insight,omitempty"`
+	Category          *ProjectCategoryScheme    `json:"projectCategory,omitempty"`
+	Deleted           bool                      `json:"deleted,omitempty"`
+	RetentionTillDate string                    `json:"retentionTillDate,omitempty"`
+	DeletedDate       string                    `json:"deletedDate,omitempty"`
+	DeletedBy         *UserScheme               `json:"deletedBy,omitempty"`
+	Archived          bool                      `json:"archived,omitempty"`
+	ArchivedDate      string                    `json:"archivedDate,omitempty"`
+	ArchivedBy        *UserScheme               `json:"archivedBy,omitempty"`
 }
 
 type ProjectInsightScheme struct {
@@ -276,6 +288,10 @@ type ProjectUpdateScheme struct {
 // Docs: https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-projects/#api-rest-api-3-project-projectidorkey-put
 func (p *ProjectService) Update(ctx context.Context, projectKeyOrID string, payload *ProjectUpdateScheme) (result *ProjectScheme, response *Response, err error) {
 
+	if len(projectKeyOrID) == 0 {
+		return nil, nil, fmt.Errorf("erro!, please provide a valid projectKeyOrID value")
+	}
+
 	if payload == nil {
 		return nil, nil, fmt.Errorf("error, please provide a valid ProjectUpdateScheme pointer")
 	}
@@ -306,6 +322,10 @@ func (p *ProjectService) Update(ctx context.Context, projectKeyOrID string, payl
 // https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-projects/#api-rest-api-3-project-projectidorkey-delete
 func (p *ProjectService) Delete(ctx context.Context, projectKeyOrID string, enableUndo bool) (response *Response, err error) {
 
+	if len(projectKeyOrID) == 0 {
+		return nil, fmt.Errorf("erro!, please provide a valid projectKeyOrID value")
+	}
+
 	params := url.Values{}
 	if enableUndo {
 		params.Add("enableUndo", "true")
@@ -337,6 +357,10 @@ func (p *ProjectService) Delete(ctx context.Context, projectKeyOrID string, enab
 // Docs: https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-projects/#api-rest-api-3-project-projectidorkey-delete-post
 func (p *ProjectService) DeleteAsynchronously(ctx context.Context, projectKeyOrID string) (result *TaskScheme, response *Response, err error) {
 
+	if len(projectKeyOrID) == 0 {
+		return nil, nil, fmt.Errorf("erro!, please provide a valid projectKeyOrID value")
+	}
+
 	var endpoint = fmt.Sprintf("rest/api/3/project/%v/delete", projectKeyOrID)
 
 	request, err := p.client.newRequest(ctx, http.MethodPost, endpoint, nil)
@@ -363,6 +387,10 @@ func (p *ProjectService) DeleteAsynchronously(ctx context.Context, projectKeyOrI
 // Docs: https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-projects/#api-rest-api-3-project-projectidorkey-archive-post
 func (p *ProjectService) Archive(ctx context.Context, projectKeyOrID string) (response *Response, err error) {
 
+	if len(projectKeyOrID) == 0 {
+		return nil, fmt.Errorf("erro!, please provide a valid projectKeyOrID value")
+	}
+
 	var endpoint = fmt.Sprintf("rest/api/3/project/%v/archive", projectKeyOrID)
 
 	request, err := p.client.newRequest(ctx, http.MethodPost, endpoint, nil)
@@ -382,6 +410,10 @@ func (p *ProjectService) Archive(ctx context.Context, projectKeyOrID string) (re
 // Docs: https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-projects/#api-rest-api-3-project-projectidorkey-restore-post
 func (p *ProjectService) Restore(ctx context.Context, projectKeyOrID string) (result *ProjectScheme, response *Response, err error) {
 
+	if len(projectKeyOrID) == 0 {
+		return nil, nil, fmt.Errorf("erro!, please provide a valid projectKeyOrID value")
+	}
+
 	var endpoint = fmt.Sprintf("rest/api/3/project/%v/restore", projectKeyOrID)
 
 	request, err := p.client.newRequest(ctx, http.MethodPost, endpoint, nil)
@@ -402,32 +434,31 @@ func (p *ProjectService) Restore(ctx context.Context, projectKeyOrID string) (re
 	return
 }
 
-type ProjectStatusScheme struct {
-	Self     string `json:"self"`
-	ID       string `json:"id"`
-	Name     string `json:"name"`
-	Subtask  bool   `json:"subtask"`
-	Statuses []struct {
-		Self             string `json:"self"`
-		Description      string `json:"description"`
-		IconURL          string `json:"iconUrl"`
-		Name             string `json:"name"`
-		UntranslatedName string `json:"untranslatedName"`
-		ID               string `json:"id"`
-		StatusCategory   struct {
-			Self      string `json:"self"`
-			ID        int    `json:"id"`
-			Key       string `json:"key"`
-			ColorName string `json:"colorName"`
-			Name      string `json:"name"`
-		} `json:"statusCategory"`
-	} `json:"statuses"`
+type ProjectStatusPageScheme struct {
+	Self     string                        `json:"self,omitempty"`
+	ID       string                        `json:"id,omitempty"`
+	Name     string                        `json:"name,omitempty"`
+	Subtask  bool                          `json:"subtask,omitempty"`
+	Statuses []*ProjectStatusDetailsScheme `json:"statuses,omitempty"`
+}
+
+type ProjectStatusDetailsScheme struct {
+	Self           string                `json:"self,omitempty"`
+	Description    string                `json:"description,omitempty"`
+	IconURL        string                `json:"iconUrl,omitempty"`
+	Name           string                `json:"name,omitempty"`
+	ID             string                `json:"id,omitempty"`
+	StatusCategory *StatusCategoryScheme `json:"statusCategory,omitempty"`
 }
 
 // Returns the valid statuses for a project.
 // The statuses are grouped by issue type, as each project has a set of valid issue types and each issue type has a set of valid statuses.
 // Docs: https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-projects/#api-rest-api-3-project-projectidorkey-statuses-get
-func (p *ProjectService) Statuses(ctx context.Context, projectKeyOrID string) (result *[]ProjectStatusScheme, response *Response, err error) {
+func (p *ProjectService) Statuses(ctx context.Context, projectKeyOrID string) (result *[]ProjectStatusPageScheme, response *Response, err error) {
+
+	if len(projectKeyOrID) == 0 {
+		return nil, nil, fmt.Errorf("erro!, please provide a valid projectKeyOrID value")
+	}
 
 	var endpoint = fmt.Sprintf("rest/api/3/project/%v/statuses", projectKeyOrID)
 
@@ -441,7 +472,7 @@ func (p *ProjectService) Statuses(ctx context.Context, projectKeyOrID string) (r
 		return
 	}
 
-	result = new([]ProjectStatusScheme)
+	result = new([]ProjectStatusPageScheme)
 	if err = json.Unmarshal(response.BodyAsBytes, &result); err != nil {
 		return
 	}
@@ -468,6 +499,10 @@ type ProjectIssueTypeHierarchyScheme struct {
 // Docs: https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-projects/#api-rest-api-3-project-projectid-hierarchy-get
 func (p *ProjectService) Hierarchy(ctx context.Context, projectKeyOrID string) (result *ProjectIssueTypeHierarchyScheme, response *Response, err error) {
 
+	if len(projectKeyOrID) == 0 {
+		return nil, nil, fmt.Errorf("erro!, please provide a valid projectKeyOrID value")
+	}
+
 	var endpoint = fmt.Sprintf("rest/api/3/project/%v/hierarchy", projectKeyOrID)
 
 	request, err := p.client.newRequest(ctx, http.MethodGet, endpoint, nil)
@@ -489,85 +524,47 @@ func (p *ProjectService) Hierarchy(ctx context.Context, projectKeyOrID string) (
 }
 
 type NotificationSchemeScheme struct {
-	Expand                   string `json:"expand"`
-	ID                       int    `json:"id"`
-	Self                     string `json:"self"`
-	Name                     string `json:"name"`
-	Description              string `json:"description"`
-	NotificationSchemeEvents []struct {
-		Event struct {
-			ID          int    `json:"id"`
-			Name        string `json:"name"`
-			Description string `json:"description"`
-		} `json:"event"`
-
-		Notifications []struct {
-			ID               int    `json:"id"`
-			NotificationType string `json:"notificationType"`
-			Parameter        string `json:"parameter,omitempty"`
-			Group            struct {
-				Name string `json:"name"`
-				Self string `json:"self"`
-			} `json:"group,omitempty"`
-			Expand      string `json:"expand,omitempty"`
-			ProjectRole struct {
-				Self        string `json:"self"`
-				Name        string `json:"name"`
-				ID          int    `json:"id"`
-				Description string `json:"description"`
-				Actors      []struct {
-					ID          int    `json:"id"`
-					DisplayName string `json:"displayName"`
-					Type        string `json:"type"`
-					Name        string `json:"name,omitempty"`
-					ActorGroup  struct {
-						Name        string `json:"name"`
-						DisplayName string `json:"displayName"`
-					} `json:"actorGroup,omitempty"`
-					ActorUser struct {
-						AccountID string `json:"accountId"`
-					} `json:"actorUser,omitempty"`
-				} `json:"actors"`
-				Scope struct {
-					Type    string `json:"type"`
-					Project struct {
-						ID   string `json:"id"`
-						Key  string `json:"key"`
-						Name string `json:"name"`
-					} `json:"project"`
-				} `json:"scope"`
-			} `json:"projectRole,omitempty"`
-			EmailAddress string `json:"emailAddress,omitempty"`
-			User         struct {
-				Self        string `json:"self"`
-				AccountID   string `json:"accountId"`
-				DisplayName string `json:"displayName"`
-				Active      bool   `json:"active"`
-			} `json:"user,omitempty"`
-			Field struct {
-				ID               string   `json:"id"`
-				Key              string   `json:"key"`
-				Name             string   `json:"name"`
-				UntranslatedName string   `json:"untranslatedName"`
-				Custom           bool     `json:"custom"`
-				Orderable        bool     `json:"orderable"`
-				Navigable        bool     `json:"navigable"`
-				Searchable       bool     `json:"searchable"`
-				ClauseNames      []string `json:"clauseNames"`
-				Schema           struct {
-					Type     string `json:"type"`
-					Custom   string `json:"custom"`
-					CustomID int    `json:"customId"`
-				} `json:"schema"`
-			} `json:"field,omitempty"`
-		} `json:"notifications"`
-	} `json:"notificationSchemeEvents"`
+	Expand                   string                                  `json:"expand,omitempty"`
+	ID                       int                                     `json:"id,omitempty"`
+	Self                     string                                  `json:"self,omitempty"`
+	Name                     string                                  `json:"name,omitempty"`
+	Description              string                                  `json:"description,omitempty"`
+	NotificationSchemeEvents []*ProjectNotificationSchemeEventScheme `json:"notificationSchemeEvents,omitempty"`
+	Scope                    *TeamManagedProjectScopeScheme          `json:"scope,omitempty"`
+}
+
+type ProjectNotificationSchemeEventScheme struct {
+	Event         *NotificationEventScheme   `json:"event,omitempty"`
+	Notifications []*EventNotificationScheme `json:"notifications,omitempty"`
+}
+
+type NotificationEventScheme struct {
+	ID            int                      `json:"id,omitempty"`
+	Name          string                   `json:"name,omitempty"`
+	Description   string                   `json:"description,omitempty"`
+	TemplateEvent *NotificationEventScheme `json:"templateEvent,omitempty"`
+}
+
+type EventNotificationScheme struct {
+	Expand           string             `json:"expand,omitempty"`
+	ID               int                `json:"id,omitempty"`
+	NotificationType string             `json:"notificationType,omitempty"`
+	Parameter        string             `json:"parameter,omitempty"`
+	EmailAddress     string             `json:"emailAddress,omitempty"`
+	Group            *GroupScheme       `json:"group,omitempty"`
+	Field            *IssueFieldScheme  `json:"field,omitempty"`
+	ProjectRole      *ProjectRoleScheme `json:"projectRole,omitempty"`
+	User             *UserScheme        `json:"user,omitempty"`
 }
 
 // Search a notification scheme associated with the project.
 // Docs: https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-projects/#api-rest-api-3-project-projectkeyorid-notificationscheme-get
 func (p *ProjectService) NotificationScheme(ctx context.Context, projectKeyOrID string, expands []string) (result *NotificationSchemeScheme, response *Response, err error) {
 
+	if len(projectKeyOrID) == 0 {
+		return nil, nil, fmt.Errorf("erro!, please provide a valid projectKeyOrID value")
+	}
+
 	params := url.Values{}
 	var expand string
 
diff --git a/jira/projectComponent.go b/jira/projectComponent.go
index d58499f..57d5ce7 100644
--- a/jira/projectComponent.go
+++ b/jira/projectComponent.go
@@ -56,6 +56,7 @@ type ProjectComponentScheme struct {
 	Name                string      `json:"name,omitempty"`
 	Description         string      `json:"description,omitempty"`
 	Lead                *UserScheme `json:"lead,omitempty"`
+	LeadUserName        string      `json:"leadUserName,omitempty"`
 	AssigneeType        string      `json:"assigneeType,omitempty"`
 	Assignee            *UserScheme `json:"assignee,omitempty"`
 	RealAssigneeType    string      `json:"realAssigneeType,omitempty"`
diff --git a/jira/projectPermissionScheme.go b/jira/projectPermissionScheme.go
index 5640edb..59a60fd 100644
--- a/jira/projectPermissionScheme.go
+++ b/jira/projectPermissionScheme.go
@@ -10,33 +10,9 @@ import (
 
 type ProjectPermissionSchemeService struct{ client *Client }
 
-type ProjectPermissionSchemeScheme struct {
-	Expand      string `json:"expand"`
-	ID          int    `json:"id"`
-	Self        string `json:"self"`
-	Name        string `json:"name"`
-	Description string `json:"description"`
-	Permissions []struct {
-		ID     int    `json:"id"`
-		Self   string `json:"self"`
-		Holder struct {
-			Type        string `json:"type"`
-			Parameter   string `json:"parameter"`
-			ProjectRole struct {
-				Self        string `json:"self"`
-				Name        string `json:"name"`
-				ID          int    `json:"id"`
-				Description string `json:"description"`
-			} `json:"projectRole"`
-			Expand string `json:"expand"`
-		} `json:"holder"`
-		Permission string `json:"permission"`
-	} `json:"permissions"`
-}
-
 // Search the permission scheme associated with the project.
 // Docs: https://docs.go-atlassian.io/jira-software-cloud/projects/permission-schemes#get-assigned-permission-scheme
-func (p *ProjectPermissionSchemeService) Get(ctx context.Context, projectKeyOrID string, expands []string) (result *ProjectPermissionSchemeScheme, response *Response, err error) {
+func (p *ProjectPermissionSchemeService) Get(ctx context.Context, projectKeyOrID string, expands []string) (result *PermissionSchemeScheme, response *Response, err error) {
 
 	if len(projectKeyOrID) == 0 {
 		return nil, nil, fmt.Errorf("error, please provide a valid projectKeyOrID value")
@@ -78,7 +54,7 @@ func (p *ProjectPermissionSchemeService) Get(ctx context.Context, projectKeyOrID
 		return
 	}
 
-	result = new(ProjectPermissionSchemeScheme)
+	result = new(PermissionSchemeScheme)
 	if err = json.Unmarshal(response.BodyAsBytes, &result); err != nil {
 		return
 	}
@@ -89,7 +65,7 @@ func (p *ProjectPermissionSchemeService) Get(ctx context.Context, projectKeyOrID
 // Assigns a permission scheme with a project.
 // See Managing project permissions for more information about permission schemes.
 // Docs: https://docs.go-atlassian.io/jira-software-cloud/projects/permission-schemes#assign-permission-scheme
-func (p *ProjectPermissionSchemeService) Assign(ctx context.Context, projectKeyOrID string, permissionSchemeID int) (result *ProjectPermissionSchemeScheme, response *Response, err error) {
+func (p *ProjectPermissionSchemeService) Assign(ctx context.Context, projectKeyOrID string, permissionSchemeID int) (result *PermissionSchemeScheme, response *Response, err error) {
 
 	if len(projectKeyOrID) == 0 {
 		return nil, nil, fmt.Errorf("error, please provide a valid projectKeyOrID value")
@@ -114,7 +90,7 @@ func (p *ProjectPermissionSchemeService) Assign(ctx context.Context, projectKeyO
 		return
 	}
 
-	result = new(ProjectPermissionSchemeScheme)
+	result = new(PermissionSchemeScheme)
 	if err = json.Unmarshal(response.BodyAsBytes, &result); err != nil {
 		return
 	}
diff --git a/jira/projectRole.go b/jira/projectRole.go
index ebd5478..36e1fa4 100644
--- a/jira/projectRole.go
+++ b/jira/projectRole.go
@@ -68,31 +68,29 @@ func (p *ProjectRoleService) Gets(ctx context.Context, projectKeyOrID string) (r
 }
 
 type ProjectRoleScheme struct {
-	Self        string `json:"self"`
-	Name        string `json:"name"`
-	ID          int    `json:"id"`
-	Description string `json:"description"`
-	Actors      []struct {
-		ID          int    `json:"id"`
-		DisplayName string `json:"displayName"`
-		Type        string `json:"type"`
-		Name        string `json:"name,omitempty"`
-		ActorGroup  struct {
-			Name        string `json:"name"`
-			DisplayName string `json:"displayName"`
-		} `json:"actorGroup,omitempty"`
-		ActorUser struct {
-			AccountID string `json:"accountId"`
-		} `json:"actorUser,omitempty"`
-	} `json:"actors"`
-	Scope struct {
-		Type    string `json:"type"`
-		Project struct {
-			ID   string `json:"id"`
-			Key  string `json:"key"`
-			Name string `json:"name"`
-		} `json:"project"`
-	} `json:"scope"`
+	Self             string                         `json:"self,omitempty"`
+	Name             string                         `json:"name,omitempty"`
+	ID               int                            `json:"id,omitempty"`
+	Description      string                         `json:"description,omitempty"`
+	Actors           []*RoleActorScheme             `json:"actors,omitempty"`
+	Scope            *TeamManagedProjectScopeScheme `json:"scope,omitempty"`
+	TranslatedName   string                         `json:"translatedName,omitempty"`
+	CurrentUserRole  bool                           `json:"currentUserRole,omitempty"`
+	Admin            bool                           `json:"admin,omitempty"`
+	RoleConfigurable bool                           `json:"roleConfigurable,omitempty"`
+	Default          bool                           `json:"default,omitempty"`
+}
+
+type RoleActorScheme struct {
+	ID          int    `json:"id,omitempty"`
+	DisplayName string `json:"displayName,omitempty"`
+	Type        string `json:"type,omitempty"`
+	Name        string `json:"name,omitempty"`
+	AvatarURL   string `json:"avatarUrl,omitempty"`
+	ActorUser   struct {
+		AccountID string `json:"accountId,omitempty"`
+	} `json:"actorUser,omitempty"`
+	ActorGroup *GroupScheme `json:"actorGroup,omitempty"`
 }
 
 // Returns a project role's details and actors associated with the project.
@@ -125,14 +123,15 @@ func (p *ProjectRoleService) Get(ctx context.Context, projectKeyOrID string, rol
 }
 
 type ProjectRoleDetailScheme struct {
-	Self             string `json:"self"`
-	Name             string `json:"name"`
-	ID               int    `json:"id"`
-	Description      string `json:"description"`
-	Admin            bool   `json:"admin"`
-	Default          bool   `json:"default"`
-	RoleConfigurable bool   `json:"roleConfigurable"`
-	TranslatedName   string `json:"translatedName"`
+	Self             string                         `json:"self,omitempty"`
+	Name             string                         `json:"name,omitempty"`
+	ID               int                            `json:"id,omitempty"`
+	Description      string                         `json:"description,omitempty"`
+	Admin            bool                           `json:"admin,omitempty"`
+	Scope            *TeamManagedProjectScopeScheme `json:"scope,omitempty"`
+	RoleConfigurable bool                           `json:"roleConfigurable,omitempty"`
+	TranslatedName   string                         `json:"translatedName,omitempty"`
+	Default          bool                           `json:"default,omitempty"`
 }
 
 // Returns all project roles and the details for each role.
diff --git a/jira/screen.go b/jira/screen.go
index e054bd2..809095b 100644
--- a/jira/screen.go
+++ b/jira/screen.go
@@ -16,22 +16,33 @@ type ScreenService struct {
 }
 
 type ScreenScheme struct {
-	ID          int    `json:"id"`
-	Name        string `json:"name"`
-	Description string `json:"description"`
+	ID          int                            `json:"id,omitempty"`
+	Name        string                         `json:"name,omitempty"`
+	Description string                         `json:"description,omitempty"`
+	Scope       *TeamManagedProjectScopeScheme `json:"scope,omitempty"`
 }
 
-type ScreenFieldSearchScheme struct {
-	MaxResults int            `json:"maxResults"`
-	StartAt    int            `json:"startAt"`
-	Total      int            `json:"total"`
-	IsLast     bool           `json:"isLast"`
-	Values     []ScreenScheme `json:"values"`
+type ScreenFieldPageScheme struct {
+	Self       string                 `json:"self,omitempty"`
+	NextPage   string                 `json:"nextPage,omitempty"`
+	MaxResults int                    `json:"maxResults,omitempty"`
+	StartAt    int                    `json:"startAt,omitempty"`
+	Total      int                    `json:"total,omitempty"`
+	IsLast     bool                   `json:"isLast,omitempty"`
+	Values     []*ScreenWithTabScheme `json:"values,omitempty"`
+}
+
+type ScreenWithTabScheme struct {
+	ID          int                            `json:"id,omitempty"`
+	Name        string                         `json:"name,omitempty"`
+	Description string                         `json:"description,omitempty"`
+	Scope       *TeamManagedProjectScopeScheme `json:"scope,omitempty"`
+	Tab         *ScreenTabScheme               `json:"tab,omitempty"`
 }
 
 // Returns a paginated list of the screens a field is used in.
 // Docs: https://docs.go-atlassian.io/jira-software-cloud/screens#get-screens-for-a-field
-func (s *ScreenService) Get(ctx context.Context, fieldID string, startAt, maxResults int) (result *ScreenFieldSearchScheme, response *Response, err error) {
+func (s *ScreenService) Fields(ctx context.Context, fieldID string, startAt, maxResults int) (result *ScreenFieldPageScheme, response *Response, err error) {
 
 	if len(fieldID) == 0 {
 		return nil, nil, fmt.Errorf("error, please provide a valid fieldID value ")
@@ -55,7 +66,7 @@ func (s *ScreenService) Get(ctx context.Context, fieldID string, startAt, maxRes
 		return
 	}
 
-	result = new(ScreenFieldSearchScheme)
+	result = new(ScreenFieldPageScheme)
 	if err = json.Unmarshal(response.BodyAsBytes, &result); err != nil {
 		return
 	}
@@ -64,12 +75,12 @@ func (s *ScreenService) Get(ctx context.Context, fieldID string, startAt, maxRes
 }
 
 type ScreenSearchPageScheme struct {
-	Self       string         `json:"self"`
-	MaxResults int            `json:"maxResults"`
-	StartAt    int            `json:"startAt"`
-	Total      int            `json:"total"`
-	IsLast     bool           `json:"isLast"`
-	Values     []ScreenScheme `json:"values"`
+	Self       string          `json:"self,omitempty"`
+	MaxResults int             `json:"maxResults,omitempty"`
+	StartAt    int             `json:"startAt,omitempty"`
+	Total      int             `json:"total,omitempty"`
+	IsLast     bool            `json:"isLast,omitempty"`
+	Values     []*ScreenScheme `json:"values,omitempty"`
 }
 
 // Returns a paginated list of all screens or those specified by one or more screen IDs.
diff --git a/jira/screenSchemes.go b/jira/screenSchemes.go
index 39a8758..38d50c5 100644
--- a/jira/screenSchemes.go
+++ b/jira/screenSchemes.go
@@ -13,24 +13,28 @@ import (
 type ScreenSchemeService struct{ client *Client }
 
 type ScreenSchemePageScheme struct {
-	Self       string               `json:"self"`
-	MaxResults int                  `json:"maxResults"`
-	StartAt    int                  `json:"startAt"`
-	Total      int                  `json:"total"`
-	IsLast     bool                 `json:"isLast"`
-	Values     []ScreenSchemeScheme `json:"values"`
+	Self       string                `json:"self,omitempty"`
+	NextPage   string                `json:"nextPage,omitempty"`
+	MaxResults int                   `json:"maxResults,omitempty"`
+	StartAt    int                   `json:"startAt,omitempty"`
+	Total      int                   `json:"total,omitempty"`
+	IsLast     bool                  `json:"isLast,omitempty"`
+	Values     []*ScreenSchemeScheme `json:"values,omitempty"`
 }
 
 type ScreenSchemeScheme struct {
-	ID          int    `json:"id,omitempty"`
-	Name        string `json:"name,omitempty"`
-	Description string `json:"description,omitempty"`
-	Screens     struct {
-		Default int `json:"default,omitempty"`
-		View    int `json:"view,omitempty"`
-		Edit    int `json:"edit,omitempty"`
-		Create  int `json:"create,omitempty"`
-	} `json:"screens,omitempty"`
+	ID                     int                        `json:"id,omitempty"`
+	Name                   string                     `json:"name,omitempty"`
+	Description            string                     `json:"description,omitempty"`
+	Screens                *ScreenTypesScheme         `json:"screens,omitempty"`
+	IssueTypeScreenSchemes *IssueTypeSchemePageScheme `json:"issueTypeScreenSchemes,omitempty"`
+}
+
+type ScreenTypesScheme struct {
+	Create  int `json:"create,omitempty"`
+	Default int `json:"default" validate:"required"`
+	View    int `json:"view" validate:"required"`
+	Edit    int `json:"edit" validate:"required"`
 }
 
 // Returns a paginated list of screen schemes.
@@ -69,15 +73,9 @@ func (s *ScreenSchemeService) Gets(ctx context.Context, screenSchemeIDs []int, s
 }
 
 type ScreenSchemePayloadScheme struct {
-	Screens     *ScreenSchemeScreensPayloadScheme `json:"screens"`
-	Name        string                            `json:"name" validate:"required"`
-	Description string                            `json:"description,omitempty"`
-}
-
-type ScreenSchemeScreensPayloadScheme struct {
-	Default int `json:"default" validate:"required"`
-	View    int `json:"view" validate:"required"`
-	Edit    int `json:"edit" validate:"required"`
+	Screens     *ScreenTypesScheme `json:"screens"`
+	Name        string             `json:"name" validate:"required"`
+	Description string             `json:"description,omitempty"`
 }
 
 // Creates a screen scheme.


Test patch:
diff --git a/jira/issueVote_test.go b/jira/issueVote_test.go
index b4b485a..51b2074 100644
--- a/jira/issueVote_test.go
+++ b/jira/issueVote_test.go
@@ -302,6 +302,17 @@ func TestVoteService_Gets(t *testing.T) {
 			wantErr:            false,
 		},
 
+		{
+			name:               "GetIssueVotesWhenTheResponseBodyIsEmpty",
+			issueKeyOrID:       "DUMMY-3",
+			wantHTTPMethod:     http.MethodGet,
+			endpoint:           "/rest/api/3/issue/DUMMY-3/votes",
+			mockFile:           "./mocks/empty_json.json",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusOK,
+			wantErr:            true,
+		},
+
 		{
 			name:               "GetIssueVotesWhenTheIssueKeyIsEmpty",
 			issueKeyOrID:       "",
diff --git a/jira/issueWatcher_test.go b/jira/issueWatcher_test.go
index eec9180..6a726d3 100644
--- a/jira/issueWatcher_test.go
+++ b/jira/issueWatcher_test.go
@@ -168,6 +168,28 @@ func TestWatcherService_Delete(t *testing.T) {
 			wantErr:            false,
 		},
 
+		{
+			name:               "DeleteIssueWatcherWhenTheEmptyIsEmpty",
+			issueKeyOrID:       "DUMMY-3",
+			accountID:          "e75fa4ab-c86b-4500-b522-de963f31b928",
+			wantHTTPMethod:     http.MethodDelete,
+			endpoint:           "",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusNoContent,
+			wantErr:            true,
+		},
+
+		{
+			name:               "DeleteIssueWatcherWhenTheContextIsNil",
+			issueKeyOrID:       "DUMMY-3",
+			accountID:          "e75fa4ab-c86b-4500-b522-de963f31b928",
+			wantHTTPMethod:     http.MethodDelete,
+			endpoint:           "/rest/api/3/issue/DUMMY-3/watchers?accountId=e75fa4ab-c86b-4500-b522-de963f31b928",
+			context:            nil,
+			wantHTTPCodeReturn: http.StatusNoContent,
+			wantErr:            true,
+		},
+
 		{
 			name:               "DeleteIssueWatcherWhenTheIssueKeyIsEmpty",
 			issueKeyOrID:       "",
@@ -304,6 +326,17 @@ func TestWatcherService_Get(t *testing.T) {
 			wantErr:            false,
 		},
 
+		{
+			name:               "GetsIssueWatchersWhenTheResponseBodyIsEmpty",
+			issueKeyOrID:       "DUMMY-3",
+			wantHTTPMethod:     http.MethodGet,
+			endpoint:           "/rest/api/3/issue/DUMMY-3/watchers",
+			mockFile:           "./mocks/empty_json.json",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusOK,
+			wantErr:            true,
+		},
+
 		{
 			name:               "GetsIssueWatchersWhenTheIssueKeyIsEmpty",
 			issueKeyOrID:       "",
@@ -386,7 +419,7 @@ func TestWatcherService_Get(t *testing.T) {
 
 			i := &WatcherService{client: mockClient}
 
-			gotResult, gotResponse, err := i.Get(testCase.context, testCase.issueKeyOrID)
+			gotResult, gotResponse, err := i.Gets(testCase.context, testCase.issueKeyOrID)
 
 			if testCase.wantErr {
 
diff --git a/jira/permissionGrantScheme_test.go b/jira/permissionGrantScheme_test.go
index 2e4a0bd..677388a 100644
--- a/jira/permissionGrantScheme_test.go
+++ b/jira/permissionGrantScheme_test.go
@@ -26,7 +26,7 @@ func TestPermissionGrantSchemeService_Create(t *testing.T) {
 			name:     "CreatePermissionGrantWhenTheParametersAreCorrect",
 			schemeID: 1000,
 			payload: &PermissionGrantPayloadScheme{
-				Holder: &PermissionGrantHolderPayloadScheme{
+				Holder: &PermissionGrantHolderScheme{
 					Parameter: "scrum-masters",
 					Type:      "group",
 				},
@@ -40,6 +40,24 @@ func TestPermissionGrantSchemeService_Create(t *testing.T) {
 			wantErr:            false,
 		},
 
+		{
+			name:     "CreatePermissionGrantWhenThePermissionSchemeIDIsNotProvided",
+			schemeID: 0,
+			payload: &PermissionGrantPayloadScheme{
+				Holder: &PermissionGrantHolderScheme{
+					Parameter: "scrum-masters",
+					Type:      "group",
+				},
+				Permission: "EDIT_ISSUES",
+			},
+			mockFile:           "./mocks/get-permission-grant.json",
+			wantHTTPMethod:     http.MethodPost,
+			endpoint:           "/rest/api/3/permissionscheme/1000/permission",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusCreated,
+			wantErr:            true,
+		},
+
 		{
 			name:               "CreatePermissionGrantWhenThePayloadIsNil",
 			schemeID:           1000,
@@ -56,7 +74,7 @@ func TestPermissionGrantSchemeService_Create(t *testing.T) {
 			name:     "CreatePermissionGrantWhenTheEndpointIsIncorrect",
 			schemeID: 1000,
 			payload: &PermissionGrantPayloadScheme{
-				Holder: &PermissionGrantHolderPayloadScheme{
+				Holder: &PermissionGrantHolderScheme{
 					Parameter: "scrum-masters",
 					Type:      "group",
 				},
@@ -74,7 +92,7 @@ func TestPermissionGrantSchemeService_Create(t *testing.T) {
 			name:     "CreatePermissionGrantWhenTheRequestMethodIsIncorrect",
 			schemeID: 1000,
 			payload: &PermissionGrantPayloadScheme{
-				Holder: &PermissionGrantHolderPayloadScheme{
+				Holder: &PermissionGrantHolderScheme{
 					Parameter: "scrum-masters",
 					Type:      "group",
 				},
@@ -92,7 +110,7 @@ func TestPermissionGrantSchemeService_Create(t *testing.T) {
 			name:     "CreatePermissionGrantWhenTheStatusCodeIsIncorrect",
 			schemeID: 1000,
 			payload: &PermissionGrantPayloadScheme{
-				Holder: &PermissionGrantHolderPayloadScheme{
+				Holder: &PermissionGrantHolderScheme{
 					Parameter: "scrum-masters",
 					Type:      "group",
 				},
@@ -110,7 +128,7 @@ func TestPermissionGrantSchemeService_Create(t *testing.T) {
 			name:     "CreatePermissionGrantWhenTheContextIsNil",
 			schemeID: 1000,
 			payload: &PermissionGrantPayloadScheme{
-				Holder: &PermissionGrantHolderPayloadScheme{
+				Holder: &PermissionGrantHolderScheme{
 					Parameter: "scrum-masters",
 					Type:      "group",
 				},
@@ -128,7 +146,7 @@ func TestPermissionGrantSchemeService_Create(t *testing.T) {
 			name:     "CreatePermissionGrantWhenTheResponseBodyHasADifferentFormat",
 			schemeID: 1000,
 			payload: &PermissionGrantPayloadScheme{
-				Holder: &PermissionGrantHolderPayloadScheme{
+				Holder: &PermissionGrantHolderScheme{
 					Parameter: "scrum-masters",
 					Type:      "group",
 				},
@@ -231,6 +249,28 @@ func TestPermissionGrantSchemeService_Delete(t *testing.T) {
 			wantErr:            false,
 		},
 
+		{
+			name:               "DeletePermissionGrantWhenThePermissionSchemeIDIsNotProvided",
+			schemeID:           0,
+			permissionID:       10002,
+			wantHTTPMethod:     http.MethodDelete,
+			endpoint:           "/rest/api/3/permissionscheme/1000/permission/10002",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusNoContent,
+			wantErr:            true,
+		},
+
+		{
+			name:               "DeletePermissionGrantWhenThePermissionGrantIDIsNotProvided",
+			schemeID:           1000,
+			permissionID:       0,
+			wantHTTPMethod:     http.MethodDelete,
+			endpoint:           "/rest/api/3/permissionscheme/1000/permission/10002",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusNoContent,
+			wantErr:            true,
+		},
+
 		{
 			name:               "DeletePermissionGrantWhenTheEndpointIsIncorrect",
 			schemeID:           1000,
@@ -366,6 +406,32 @@ func TestPermissionGrantSchemeService_Get(t *testing.T) {
 			wantErr:            false,
 		},
 
+		{
+			name:               "GetPermissionGrantWhenThePermissionSchemeIDIsNotProvided",
+			schemeID:           0,
+			permissionID:       10002,
+			expands:            []string{"field", "group", "permissions"},
+			wantHTTPMethod:     http.MethodGet,
+			mockFile:           "./mocks/get-permission-grant.json",
+			endpoint:           "/rest/api/3/permissionscheme/1000/permission/10002?expand=field%2Cgroup%2Cpermissions",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusOK,
+			wantErr:            true,
+		},
+
+		{
+			name:               "GetPermissionGrantWhenThePermissionGrantIDIsNotProvided",
+			schemeID:           1000,
+			permissionID:       0,
+			expands:            []string{"field", "group", "permissions"},
+			wantHTTPMethod:     http.MethodGet,
+			mockFile:           "./mocks/get-permission-grant.json",
+			endpoint:           "/rest/api/3/permissionscheme/1000/permission/10002?expand=field%2Cgroup%2Cpermissions",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusOK,
+			wantErr:            true,
+		},
+
 		{
 			name:               "GetPermissionGrantWhenTheExpandIsNil",
 			schemeID:           1000,
@@ -521,6 +587,18 @@ func TestPermissionGrantSchemeService_Gets(t *testing.T) {
 			wantErr:            false,
 		},
 
+		{
+			name:               "GetPermissionGrantsWhenThePermissionSchemeIDIsNotProvided",
+			schemeID:           0,
+			expands:            []string{"field", "group", "permissions"},
+			wantHTTPMethod:     http.MethodGet,
+			mockFile:           "./mocks/get-permission-grants.json",
+			endpoint:           "/rest/api/3/permissionscheme/1000/permission?expand=field%2Cgroup%2Cpermissions",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusOK,
+			wantErr:            true,
+		},
+
 		{
 			name:               "GetPermissionGrantsWhenTheExpandIsNil",
 			schemeID:           1000,
diff --git a/jira/permissionScheme_test.go b/jira/permissionScheme_test.go
index c4b773c..25ace65 100644
--- a/jira/permissionScheme_test.go
+++ b/jira/permissionScheme_test.go
@@ -12,35 +12,35 @@ import (
 func TestPermissionSchemeService_Create(t *testing.T) {
 
 	testCases := []struct {
-		name                        string
-		permissionSchemeName        string
-		permissionSchemeDescription string
-		permissionGrants            *[]PermissionGrantPayloadScheme
-		mockFile                    string
-		wantHTTPMethod              string
-		endpoint                    string
-		context                     context.Context
-		wantHTTPCodeReturn          int
-		wantErr                     bool
+		name               string
+		payload            *PermissionSchemeScheme
+		mockFile           string
+		wantHTTPMethod     string
+		endpoint           string
+		context            context.Context
+		wantHTTPCodeReturn int
+		wantErr            bool
 	}{
 		{
-			name:                        "CreatePermissionSchemeWhenTheParametersAreCorrect",
-			permissionSchemeName:        "DUMMY - Permission Scheme",
-			permissionSchemeDescription: "Dummy permission scheme description",
-			permissionGrants: &[]PermissionGrantPayloadScheme{
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+			name: "CreatePermissionSchemeWhenTheParametersAreCorrect",
+			payload: &PermissionSchemeScheme{
+				Name:        "EF Permission Scheme",
+				Description: "EF Permission Scheme description",
+
+				Permissions: []*PermissionGrantScheme{
+					{
+						Permission: "ADMINISTER_PROJECTS",
+						Holder: &PermissionGrantHolderScheme{
+							Parameter: "jira-administrators-system",
+							Type:      "group",
+						},
 					},
-					Permission: "EDIT_ISSUES",
-				},
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+					{
+						Permission: "CLOSE_ISSUES",
+						Holder: &PermissionGrantHolderScheme{
+							Type: "assignee",
+						},
 					},
-					Permission: "EDIT_ISSUES",
 				},
 			},
 			mockFile:           "./mocks/get-permission-scheme.json",
@@ -52,38 +52,8 @@ func TestPermissionSchemeService_Create(t *testing.T) {
 		},
 
 		{
-			name:                        "CreatePermissionSchemeWhenThePermissionGrantsIsNil",
-			permissionSchemeName:        "DUMMY - Permission Scheme",
-			permissionSchemeDescription: "Dummy permission scheme description",
-			permissionGrants:            nil,
-			mockFile:                    "./mocks/get-permission-scheme.json",
-			wantHTTPMethod:              http.MethodPost,
-			endpoint:                    "/rest/api/3/permissionscheme",
-			context:                     context.Background(),
-			wantHTTPCodeReturn:          http.StatusCreated,
-			wantErr:                     true,
-		},
-
-		{
-			name:                        "CreatePermissionSchemeWhenThePermissionSchemeNameParamIsEmpty",
-			permissionSchemeName:        "",
-			permissionSchemeDescription: "Dummy permission scheme description",
-			permissionGrants: &[]PermissionGrantPayloadScheme{
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
-					},
-					Permission: "EDIT_ISSUES",
-				},
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
-					},
-					Permission: "EDIT_ISSUES",
-				},
-			},
+			name:               "CreatePermissionSchemeWhenThePayloadIsNotProvided",
+			payload:            nil,
 			mockFile:           "./mocks/get-permission-scheme.json",
 			wantHTTPMethod:     http.MethodPost,
 			endpoint:           "/rest/api/3/permissionscheme",
@@ -93,23 +63,25 @@ func TestPermissionSchemeService_Create(t *testing.T) {
 		},
 
 		{
-			name:                        "CreatePermissionSchemeWhenTheEndpointIsIncorrect",
-			permissionSchemeName:        "DUMMY - Permission Scheme",
-			permissionSchemeDescription: "Dummy permission scheme description",
-			permissionGrants: &[]PermissionGrantPayloadScheme{
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+			name: "CreatePermissionSchemeWhenTheEndpointIsIncorrect",
+			payload: &PermissionSchemeScheme{
+				Name:        "EF Permission Scheme",
+				Description: "EF Permission Scheme description",
+
+				Permissions: []*PermissionGrantScheme{
+					{
+						Permission: "ADMINISTER_PROJECTS",
+						Holder: &PermissionGrantHolderScheme{
+							Parameter: "jira-administrators-system",
+							Type:      "group",
+						},
 					},
-					Permission: "EDIT_ISSUES",
-				},
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+					{
+						Permission: "CLOSE_ISSUES",
+						Holder: &PermissionGrantHolderScheme{
+							Type: "assignee",
+						},
 					},
-					Permission: "EDIT_ISSUES",
 				},
 			},
 			mockFile:           "./mocks/get-permission-scheme.json",
@@ -121,23 +93,25 @@ func TestPermissionSchemeService_Create(t *testing.T) {
 		},
 
 		{
-			name:                        "CreatePermissionSchemeWhenTheRequestMethodIsIncorrect",
-			permissionSchemeName:        "DUMMY - Permission Scheme",
-			permissionSchemeDescription: "Dummy permission scheme description",
-			permissionGrants: &[]PermissionGrantPayloadScheme{
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+			name: "CreatePermissionSchemeWhenTheRequestMethodIsIncorrect",
+			payload: &PermissionSchemeScheme{
+				Name:        "EF Permission Scheme",
+				Description: "EF Permission Scheme description",
+
+				Permissions: []*PermissionGrantScheme{
+					{
+						Permission: "ADMINISTER_PROJECTS",
+						Holder: &PermissionGrantHolderScheme{
+							Parameter: "jira-administrators-system",
+							Type:      "group",
+						},
 					},
-					Permission: "EDIT_ISSUES",
-				},
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+					{
+						Permission: "CLOSE_ISSUES",
+						Holder: &PermissionGrantHolderScheme{
+							Type: "assignee",
+						},
 					},
-					Permission: "EDIT_ISSUES",
 				},
 			},
 			mockFile:           "./mocks/get-permission-scheme.json",
@@ -149,23 +123,25 @@ func TestPermissionSchemeService_Create(t *testing.T) {
 		},
 
 		{
-			name:                        "CreatePermissionSchemeWhenTheStatusCodeIsIncorrect",
-			permissionSchemeName:        "DUMMY - Permission Scheme",
-			permissionSchemeDescription: "Dummy permission scheme description",
-			permissionGrants: &[]PermissionGrantPayloadScheme{
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+			name: "CreatePermissionSchemeWhenTheStatusCodeIsIncorrect",
+			payload: &PermissionSchemeScheme{
+				Name:        "EF Permission Scheme",
+				Description: "EF Permission Scheme description",
+
+				Permissions: []*PermissionGrantScheme{
+					{
+						Permission: "ADMINISTER_PROJECTS",
+						Holder: &PermissionGrantHolderScheme{
+							Parameter: "jira-administrators-system",
+							Type:      "group",
+						},
 					},
-					Permission: "EDIT_ISSUES",
-				},
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+					{
+						Permission: "CLOSE_ISSUES",
+						Holder: &PermissionGrantHolderScheme{
+							Type: "assignee",
+						},
 					},
-					Permission: "EDIT_ISSUES",
 				},
 			},
 			mockFile:           "./mocks/get-permission-scheme.json",
@@ -177,23 +153,25 @@ func TestPermissionSchemeService_Create(t *testing.T) {
 		},
 
 		{
-			name:                        "CreatePermissionSchemeWhenTheContextIsNil",
-			permissionSchemeName:        "DUMMY - Permission Scheme",
-			permissionSchemeDescription: "Dummy permission scheme description",
-			permissionGrants: &[]PermissionGrantPayloadScheme{
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+			name: "CreatePermissionSchemeWhenTheContextIsNil",
+			payload: &PermissionSchemeScheme{
+				Name:        "EF Permission Scheme",
+				Description: "EF Permission Scheme description",
+
+				Permissions: []*PermissionGrantScheme{
+					{
+						Permission: "ADMINISTER_PROJECTS",
+						Holder: &PermissionGrantHolderScheme{
+							Parameter: "jira-administrators-system",
+							Type:      "group",
+						},
 					},
-					Permission: "EDIT_ISSUES",
-				},
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+					{
+						Permission: "CLOSE_ISSUES",
+						Holder: &PermissionGrantHolderScheme{
+							Type: "assignee",
+						},
 					},
-					Permission: "EDIT_ISSUES",
 				},
 			},
 			mockFile:           "./mocks/get-permission-scheme.json",
@@ -205,23 +183,25 @@ func TestPermissionSchemeService_Create(t *testing.T) {
 		},
 
 		{
-			name:                        "CreatePermissionSchemeWhenTheResponseBodyHasADifferentFormat",
-			permissionSchemeName:        "DUMMY - Permission Scheme",
-			permissionSchemeDescription: "Dummy permission scheme description",
-			permissionGrants: &[]PermissionGrantPayloadScheme{
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+			name: "CreatePermissionSchemeWhenTheResponseBodyHasADifferentFormat",
+			payload: &PermissionSchemeScheme{
+				Name:        "EF Permission Scheme",
+				Description: "EF Permission Scheme description",
+
+				Permissions: []*PermissionGrantScheme{
+					{
+						Permission: "ADMINISTER_PROJECTS",
+						Holder: &PermissionGrantHolderScheme{
+							Parameter: "jira-administrators-system",
+							Type:      "group",
+						},
 					},
-					Permission: "EDIT_ISSUES",
-				},
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+					{
+						Permission: "CLOSE_ISSUES",
+						Holder: &PermissionGrantHolderScheme{
+							Type: "assignee",
+						},
 					},
-					Permission: "EDIT_ISSUES",
 				},
 			},
 			mockFile:           "./mocks/empty_json.json",
@@ -260,9 +240,7 @@ func TestPermissionSchemeService_Create(t *testing.T) {
 
 			i := &PermissionSchemeService{client: mockClient}
 
-			gotResult, gotResponse, err := i.Create(testCase.context,
-				testCase.permissionSchemeName,
-				testCase.permissionSchemeDescription, testCase.permissionGrants)
+			gotResult, gotResponse, err := i.Create(testCase.context, testCase.payload)
 
 			if testCase.wantErr {
 
@@ -321,6 +299,16 @@ func TestPermissionSchemeService_Delete(t *testing.T) {
 			wantErr:            false,
 		},
 
+		{
+			name:               "DeletePermissionSchemeWhenThePermissionSchemeIDIsNotProvided",
+			permissionSchemeID: 0,
+			wantHTTPMethod:     http.MethodDelete,
+			endpoint:           "/rest/api/3/permissionscheme/1000",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusNoContent,
+			wantErr:            true,
+		},
+
 		{
 			name:               "DeletePermissionSchemeWhenTheEndpointIsIncorrect",
 			permissionSchemeID: 1000,
@@ -448,6 +436,17 @@ func TestPermissionSchemeService_Get(t *testing.T) {
 			wantErr:            false,
 		},
 
+		{
+			name:               "GetPermissionSchemeWhenThePermissionSchemeIDIsNotProvided",
+			permissionSchemeID: 0,
+			wantHTTPMethod:     http.MethodGet,
+			endpoint:           "/rest/api/3/permissionscheme/1000",
+			mockFile:           "./mocks/get-permission-scheme.json",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusOK,
+			wantErr:            true,
+		},
+
 		{
 			name:               "GetPermissionSchemeWhenTheEndpointIsIncorrect",
 			permissionSchemeID: 1000,
@@ -695,37 +694,56 @@ func TestPermissionSchemeService_Gets(t *testing.T) {
 
 func TestPermissionSchemeService_Update(t *testing.T) {
 	testCases := []struct {
-		name                        string
-		schemeID                    int
-		permissionSchemeName        string
-		permissionSchemeDescription string
-		permissionGrants            *[]PermissionGrantPayloadScheme
-		mockFile                    string
-		wantHTTPMethod              string
-		endpoint                    string
-		context                     context.Context
-		wantHTTPCodeReturn          int
-		wantErr                     bool
+		name               string
+		schemeID           int
+		payload            *PermissionSchemeScheme
+		mockFile           string
+		wantHTTPMethod     string
+		endpoint           string
+		context            context.Context
+		wantHTTPCodeReturn int
+		wantErr            bool
 	}{
 		{
-			name:                        "UpdatePermissionSchemeWhenTheParametersAreCorrect",
-			schemeID:                    1000,
-			permissionSchemeName:        "DUMMY - Permission Scheme",
-			permissionSchemeDescription: "Dummy permission scheme description",
-			permissionGrants: &[]PermissionGrantPayloadScheme{
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+			name:     "UpdatePermissionSchemeWhenTheParametersAreCorrect",
+			schemeID: 1000,
+			payload: &PermissionSchemeScheme{
+				Name:        "EF Permission Scheme - UPDATED",
+				Description: "EF Permission Scheme description - UPDATED",
+
+				Permissions: []*PermissionGrantScheme{
+					{
+						Permission: "CLOSE_ISSUES",
+						Holder: &PermissionGrantHolderScheme{
+							Parameter: "jira-administrators-system",
+							Type:      "group",
+						},
 					},
-					Permission: "EDIT_ISSUES",
 				},
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+			},
+			mockFile:           "./mocks/get-permission-scheme.json",
+			wantHTTPMethod:     http.MethodPut,
+			endpoint:           "/rest/api/3/permissionscheme/1000",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusOK,
+			wantErr:            false,
+		},
+
+		{
+			name:     "UpdatePermissionSchemeWhenThePermissionSchemeIDIsNotProvided",
+			schemeID: 0,
+			payload: &PermissionSchemeScheme{
+				Name:        "EF Permission Scheme - UPDATED",
+				Description: "EF Permission Scheme description - UPDATED",
+
+				Permissions: []*PermissionGrantScheme{
+					{
+						Permission: "CLOSE_ISSUES",
+						Holder: &PermissionGrantHolderScheme{
+							Parameter: "jira-administrators-system",
+							Type:      "group",
+						},
 					},
-					Permission: "EDIT_ISSUES",
 				},
 			},
 			mockFile:           "./mocks/get-permission-scheme.json",
@@ -733,42 +751,51 @@ func TestPermissionSchemeService_Update(t *testing.T) {
 			endpoint:           "/rest/api/3/permissionscheme/1000",
 			context:            context.Background(),
 			wantHTTPCodeReturn: http.StatusOK,
-			wantErr:            false,
+			wantErr:            true,
 		},
 
 		{
-			name:                        "UpdatePermissionSchemeWhenThePermissionGrantsIsNil",
-			schemeID:                    1000,
-			permissionSchemeName:        "DUMMY - Permission Scheme",
-			permissionSchemeDescription: "Dummy permission scheme description",
-			permissionGrants:            nil,
-			mockFile:                    "./mocks/get-permission-scheme.json",
-			wantHTTPMethod:              http.MethodPost,
-			endpoint:                    "/rest/api/3/permissionscheme/1000",
-			context:                     context.Background(),
-			wantHTTPCodeReturn:          http.StatusCreated,
-			wantErr:                     true,
+			name:               "UpdatePermissionSchemeWhenThePayloadIsNotProvided",
+			schemeID:           1000,
+			payload:            nil,
+			mockFile:           "./mocks/get-permission-scheme.json",
+			wantHTTPMethod:     http.MethodPut,
+			endpoint:           "/rest/api/3/permissionscheme/1000",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusOK,
+			wantErr:            true,
 		},
 
 		{
-			name:                        "CreatePermissionSchemeWhenTheEndpointIsIncorrect",
-			schemeID:                    1000,
-			permissionSchemeName:        "DUMMY - Permission Scheme",
-			permissionSchemeDescription: "Dummy permission scheme description",
-			permissionGrants: &[]PermissionGrantPayloadScheme{
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
-					},
-					Permission: "EDIT_ISSUES",
-				},
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+			name:     "UpdatePermissionSchemeWhenThePermissionGrantsIsNil",
+			schemeID: 1000,
+			payload: &PermissionSchemeScheme{
+				Name:        "EF Permission Scheme - UPDATED",
+				Description: "EF Permission Scheme description - UPDATED",
+			},
+			mockFile:           "./mocks/get-permission-scheme.json",
+			wantHTTPMethod:     http.MethodPut,
+			endpoint:           "/rest/api/3/permissionscheme/1000",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusCreated,
+			wantErr:            false,
+		},
+
+		{
+			name:     "CreatePermissionSchemeWhenTheEndpointIsIncorrect",
+			schemeID: 1000,
+			payload: &PermissionSchemeScheme{
+				Name:        "EF Permission Scheme - UPDATED",
+				Description: "EF Permission Scheme description - UPDATED",
+
+				Permissions: []*PermissionGrantScheme{
+					{
+						Permission: "CLOSE_ISSUES",
+						Holder: &PermissionGrantHolderScheme{
+							Parameter: "jira-administrators-system",
+							Type:      "group",
+						},
 					},
-					Permission: "EDIT_ISSUES",
 				},
 			},
 			mockFile:           "./mocks/get-permission-scheme.json",
@@ -780,24 +807,20 @@ func TestPermissionSchemeService_Update(t *testing.T) {
 		},
 
 		{
-			name:                        "CreatePermissionSchemeWhenTheRequestMethodIsIncorrect",
-			schemeID:                    1000,
-			permissionSchemeName:        "DUMMY - Permission Scheme",
-			permissionSchemeDescription: "Dummy permission scheme description",
-			permissionGrants: &[]PermissionGrantPayloadScheme{
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
-					},
-					Permission: "EDIT_ISSUES",
-				},
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+			name:     "CreatePermissionSchemeWhenTheRequestMethodIsIncorrect",
+			schemeID: 1000,
+			payload: &PermissionSchemeScheme{
+				Name:        "EF Permission Scheme - UPDATED",
+				Description: "EF Permission Scheme description - UPDATED",
+
+				Permissions: []*PermissionGrantScheme{
+					{
+						Permission: "CLOSE_ISSUES",
+						Holder: &PermissionGrantHolderScheme{
+							Parameter: "jira-administrators-system",
+							Type:      "group",
+						},
 					},
-					Permission: "EDIT_ISSUES",
 				},
 			},
 			mockFile:           "./mocks/get-permission-scheme.json",
@@ -809,24 +832,20 @@ func TestPermissionSchemeService_Update(t *testing.T) {
 		},
 
 		{
-			name:                        "CreatePermissionSchemeWhenTheStatusCodeIsIncorrect",
-			schemeID:                    1000,
-			permissionSchemeName:        "DUMMY - Permission Scheme",
-			permissionSchemeDescription: "Dummy permission scheme description",
-			permissionGrants: &[]PermissionGrantPayloadScheme{
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
-					},
-					Permission: "EDIT_ISSUES",
-				},
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+			name:     "CreatePermissionSchemeWhenTheStatusCodeIsIncorrect",
+			schemeID: 1000,
+			payload: &PermissionSchemeScheme{
+				Name:        "EF Permission Scheme - UPDATED",
+				Description: "EF Permission Scheme description - UPDATED",
+
+				Permissions: []*PermissionGrantScheme{
+					{
+						Permission: "CLOSE_ISSUES",
+						Holder: &PermissionGrantHolderScheme{
+							Parameter: "jira-administrators-system",
+							Type:      "group",
+						},
 					},
-					Permission: "EDIT_ISSUES",
 				},
 			},
 			mockFile:           "./mocks/get-permission-scheme.json",
@@ -841,22 +860,18 @@ func TestPermissionSchemeService_Update(t *testing.T) {
 			name:     "CreatePermissionSchemeWhenTheContextIsNil",
 			schemeID: 1000,
 
-			permissionSchemeName:        "DUMMY - Permission Scheme",
-			permissionSchemeDescription: "Dummy permission scheme description",
-			permissionGrants: &[]PermissionGrantPayloadScheme{
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
-					},
-					Permission: "EDIT_ISSUES",
-				},
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+			payload: &PermissionSchemeScheme{
+				Name:        "EF Permission Scheme - UPDATED",
+				Description: "EF Permission Scheme description - UPDATED",
+
+				Permissions: []*PermissionGrantScheme{
+					{
+						Permission: "CLOSE_ISSUES",
+						Holder: &PermissionGrantHolderScheme{
+							Parameter: "jira-administrators-system",
+							Type:      "group",
+						},
 					},
-					Permission: "EDIT_ISSUES",
 				},
 			},
 			mockFile:           "./mocks/get-permission-scheme.json",
@@ -871,22 +886,18 @@ func TestPermissionSchemeService_Update(t *testing.T) {
 			name:     "CreatePermissionSchemeWhenTheResponseBodyHasADifferentFormat",
 			schemeID: 1000,
 
-			permissionSchemeName:        "DUMMY - Permission Scheme",
-			permissionSchemeDescription: "Dummy permission scheme description",
-			permissionGrants: &[]PermissionGrantPayloadScheme{
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
-					},
-					Permission: "EDIT_ISSUES",
-				},
-				{
-					Holder: &PermissionGrantHolderPayloadScheme{
-						Parameter: "scrum-masters",
-						Type:      "group",
+			payload: &PermissionSchemeScheme{
+				Name:        "EF Permission Scheme - UPDATED",
+				Description: "EF Permission Scheme description - UPDATED",
+
+				Permissions: []*PermissionGrantScheme{
+					{
+						Permission: "CLOSE_ISSUES",
+						Holder: &PermissionGrantHolderScheme{
+							Parameter: "jira-administrators-system",
+							Type:      "group",
+						},
 					},
-					Permission: "EDIT_ISSUES",
 				},
 			},
 			mockFile:           "./mocks/empty_json.json",
@@ -925,8 +936,7 @@ func TestPermissionSchemeService_Update(t *testing.T) {
 
 			i := &PermissionSchemeService{client: mockClient}
 
-			gotResult, gotResponse, err := i.Update(testCase.context, testCase.schemeID, testCase.permissionSchemeName,
-				testCase.permissionSchemeDescription, testCase.permissionGrants)
+			gotResult, gotResponse, err := i.Update(testCase.context, testCase.schemeID, testCase.payload)
 
 			if testCase.wantErr {
 
diff --git a/jira/project_test.go b/jira/project_test.go
index 73b3d6f..4e17e77 100644
--- a/jira/project_test.go
+++ b/jira/project_test.go
@@ -31,6 +31,16 @@ func TestProjectService_Archive(t *testing.T) {
 			wantErr:            false,
 		},
 
+		{
+			name:               "ArchiveProjectWhenTheProjectKeyOrIDIsNotProvided",
+			projectKeyOrID:     "",
+			wantHTTPMethod:     http.MethodPost,
+			endpoint:           "/rest/api/3/project/DUMMY/archive",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusNoContent,
+			wantErr:            true,
+		},
+
 		{
 			name:               "ArchiveProjectWhenTheProjectKeyOrIDIsIncorrect",
 			projectKeyOrID:     "DUMMYS",
@@ -422,6 +432,17 @@ func TestProjectService_Delete(t *testing.T) {
 			wantErr:            false,
 		},
 
+		{
+			name:               "DeleteProjectWhenTheProjectKeyOrIDIsNotProvided",
+			projectKeyOrID:     "",
+			enableUndo:         true,
+			wantHTTPMethod:     http.MethodDelete,
+			endpoint:           "/rest/api/3/project/DUMMY?enableUndo=true",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusNoContent,
+			wantErr:            true,
+		},
+
 		{
 			name:               "DeleteProjectWhenTheEnableUndoIsFalse",
 			projectKeyOrID:     "DUMMY",
@@ -564,6 +585,17 @@ func TestProjectService_DeleteAsynchronously(t *testing.T) {
 			wantErr:            false,
 		},
 
+		{
+			name:               "DeleteProjectAsynchronouslyWhenTheProjectKeyOrIDIsNotProvided",
+			projectKeyOrID:     "",
+			wantHTTPMethod:     http.MethodPost,
+			mockFile:           "./mocks/delete-project-asynchronously.json",
+			endpoint:           "/rest/api/3/project/DUMMY/delete",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusOK,
+			wantErr:            true,
+		},
+
 		{
 			name:               "DeleteProjectAsynchronouslyWhenTheProjectKeyOrIDIsIncorrect",
 			projectKeyOrID:     "DUMMY",
@@ -881,6 +913,17 @@ func TestProjectService_Hierarchy(t *testing.T) {
 			wantErr:            false,
 		},
 
+		{
+			name:               "GetProjectIssueTypeHierarchyWhenTheProjectKeyOrIDIsNotProvided",
+			projectKeyOrID:     "",
+			mockFile:           "./mocks/get-project-issue-type-hierarchy.json",
+			wantHTTPMethod:     http.MethodGet,
+			endpoint:           "/rest/api/3/project/DUMMY/hierarchy",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusOK,
+			wantErr:            true,
+		},
+
 		{
 			name:               "GetProjectIssueTypeHierarchyWhenTheProjectKeyOrIDIsIncorrect",
 			projectKeyOrID:     "DUMMY",
@@ -1025,6 +1068,17 @@ func TestProjectService_NotificationScheme(t *testing.T) {
 			wantErr:            false,
 		},
 
+		{
+			name:               "GetProjectNotificationSchemeWhenTheProjectKeyOrIDIsNotProvided",
+			projectKeyOrID:     "",
+			mockFile:           "./mocks/get-project-notification-scheme.json",
+			wantHTTPMethod:     http.MethodGet,
+			endpoint:           "/rest/api/3/project/DUMMY/notificationscheme",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusOK,
+			wantErr:            true,
+		},
+
 		{
 			name:               "GetProjectNotificationSchemeWhenTheExpandsAreSet",
 			projectKeyOrID:     "DUMMY",
@@ -1180,6 +1234,17 @@ func TestProjectService_Restore(t *testing.T) {
 			wantErr:            false,
 		},
 
+		{
+			name:               "RestoreDeletedProjectWhenTheProjectKeyOrIDIsNotProvided",
+			projectKeyOrID:     "",
+			mockFile:           "./mocks/get-project.json",
+			wantHTTPMethod:     http.MethodPost,
+			endpoint:           "/rest/api/3/project/DUMMY/restore",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusOK,
+			wantErr:            true,
+		},
+
 		{
 			name:               "RestoreDeletedProjectWhenTheProjectKeyOrIDIsIncorrect",
 			projectKeyOrID:     "DUMMY",
@@ -1535,6 +1600,17 @@ func TestProjectService_Statuses(t *testing.T) {
 			wantErr:            false,
 		},
 
+		{
+			name:               "GetProjectStatusesWhenTheProjectKeyIsNotProvided",
+			projectKeyOrID:     "",
+			mockFile:           "./mocks/get-project-statuses.json",
+			wantHTTPMethod:     http.MethodGet,
+			endpoint:           "/rest/api/3/project/DUMMY/statuses",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusOK,
+			wantErr:            true,
+		},
+
 		{
 			name:               "GetProjectStatusesWhenTheProjectKeyIsIncorrect",
 			projectKeyOrID:     "DUMMY",
@@ -1684,6 +1760,22 @@ func TestProjectService_Update(t *testing.T) {
 			wantErr:            false,
 		},
 
+		{
+			name:           "UpdateProjectWhenTheProjectKeyOrIDIsNotProvided",
+			projectKeyOrID: "",
+			payload: &ProjectUpdateScheme{
+				NotificationScheme: 10000,
+				Name:               "New project",
+				PermissionScheme:   10001,
+			},
+			mockFile:           "./mocks/get-project.json",
+			wantHTTPMethod:     http.MethodPut,
+			endpoint:           "/rest/api/3/project/DUMMY",
+			context:            context.Background(),
+			wantHTTPCodeReturn: http.StatusOK,
+			wantErr:            true,
+		},
+
 		{
 			name:               "UpdateProjectWhenThePayloadIsNil",
 			projectKeyOrID:     "DUMMY",
diff --git a/jira/screenSchemes_test.go b/jira/screenSchemes_test.go
index 8292c49..8e067e1 100644
--- a/jira/screenSchemes_test.go
+++ b/jira/screenSchemes_test.go
@@ -24,7 +24,7 @@ func TestScreenSchemeService_Create(t *testing.T) {
 		{
 			name: "CreateScreenSchemeWhenTheParamsAreCorrect",
 			payload: &ScreenSchemePayloadScheme{
-				Screens: &ScreenSchemeScreensPayloadScheme{
+				Screens: &ScreenTypesScheme{
 					Default: 10000,
 					View:    10000,
 					Edit:    10000,
@@ -43,7 +43,7 @@ func TestScreenSchemeService_Create(t *testing.T) {
 		{
 			name: "CreateScreenSchemeWhenAPayloadParamIsNotSet",
 			payload: &ScreenSchemePayloadScheme{
-				Screens: &ScreenSchemeScreensPayloadScheme{
+				Screens: &ScreenTypesScheme{
 					Default: 10000,
 					View:    10000,
 					Edit:    10000,
@@ -62,7 +62,7 @@ func TestScreenSchemeService_Create(t *testing.T) {
 		{
 			name: "CreateScreenSchemeWhenTheContextIsNil",
 			payload: &ScreenSchemePayloadScheme{
-				Screens: &ScreenSchemeScreensPayloadScheme{
+				Screens: &ScreenTypesScheme{
 					Default: 10000,
 					View:    10000,
 					Edit:    10000,
@@ -92,7 +92,7 @@ func TestScreenSchemeService_Create(t *testing.T) {
 		{
 			name: "CreateScreenSchemeWhenTheRequestMethodIsIncorrect",
 			payload: &ScreenSchemePayloadScheme{
-				Screens: &ScreenSchemeScreensPayloadScheme{
+				Screens: &ScreenTypesScheme{
 					Default: 10000,
 					View:    10000,
 					Edit:    10000,
@@ -111,7 +111,7 @@ func TestScreenSchemeService_Create(t *testing.T) {
 		{
 			name: "CreateScreenSchemeWhenTheStatusCodeIsIncorrect",
 			payload: &ScreenSchemePayloadScheme{
-				Screens: &ScreenSchemeScreensPayloadScheme{
+				Screens: &ScreenTypesScheme{
 					Default: 10000,
 					View:    10000,
 					Edit:    10000,
@@ -130,7 +130,7 @@ func TestScreenSchemeService_Create(t *testing.T) {
 		{
 			name: "CreateScreenSchemeWhenTheEndpointIsIncorrect",
 			payload: &ScreenSchemePayloadScheme{
-				Screens: &ScreenSchemeScreensPayloadScheme{
+				Screens: &ScreenTypesScheme{
 					Default: 10000,
 					View:    10000,
 					Edit:    10000,
@@ -149,7 +149,7 @@ func TestScreenSchemeService_Create(t *testing.T) {
 		{
 			name: "CreateScreenSchemeWhenTheResponseBodyHasADifferentFormat",
 			payload: &ScreenSchemePayloadScheme{
-				Screens: &ScreenSchemeScreensPayloadScheme{
+				Screens: &ScreenTypesScheme{
 					Default: 10000,
 					View:    10000,
 					Edit:    10000,
@@ -548,7 +548,7 @@ func TestScreenSchemeService_Update(t *testing.T) {
 			name:           "UpdateScreenSchemeWhenTheParamsAreCorrect",
 			screenSchemeID: "2001",
 			payload: &ScreenSchemePayloadScheme{
-				Screens: &ScreenSchemeScreensPayloadScheme{
+				Screens: &ScreenTypesScheme{
 					Default: 10000,
 					View:    10000,
 					Edit:    10000,
@@ -567,7 +567,7 @@ func TestScreenSchemeService_Update(t *testing.T) {
 			name:           "UpdateScreenSchemeWhenTheScreenSchemeIDIsEmpty",
 			screenSchemeID: "",
 			payload: &ScreenSchemePayloadScheme{
-				Screens: &ScreenSchemeScreensPayloadScheme{
+				Screens: &ScreenTypesScheme{
 					Default: 10000,
 					View:    10000,
 					Edit:    10000,
@@ -597,7 +597,7 @@ func TestScreenSchemeService_Update(t *testing.T) {
 			name:           "UpdateScreenSchemeWhenTheRequestMethodIsIncorrect",
 			screenSchemeID: "2001",
 			payload: &ScreenSchemePayloadScheme{
-				Screens: &ScreenSchemeScreensPayloadScheme{
+				Screens: &ScreenTypesScheme{
 					Default: 10000,
 					View:    10000,
 					Edit:    10000,
@@ -616,7 +616,7 @@ func TestScreenSchemeService_Update(t *testing.T) {
 			name:           "UpdateScreenSchemeWhenTheStatusCodeIsIncorrect",
 			screenSchemeID: "2001",
 			payload: &ScreenSchemePayloadScheme{
-				Screens: &ScreenSchemeScreensPayloadScheme{
+				Screens: &ScreenTypesScheme{
 					Default: 10000,
 					View:    10000,
 					Edit:    10000,
@@ -635,7 +635,7 @@ func TestScreenSchemeService_Update(t *testing.T) {
 			name:           "UpdateScreenSchemeWhenTheContextIsNil",
 			screenSchemeID: "2001",
 			payload: &ScreenSchemePayloadScheme{
-				Screens: &ScreenSchemeScreensPayloadScheme{
+				Screens: &ScreenTypesScheme{
 					Default: 10000,
 					View:    10000,
 					Edit:    10000,
diff --git a/jira/screen_test.go b/jira/screen_test.go
index 28370a3..4a28878 100644
--- a/jira/screen_test.go
+++ b/jira/screen_test.go
@@ -704,7 +704,7 @@ func TestScreenService_Get(t *testing.T) {
 
 			i := &ScreenService{client: mockClient}
 
-			gotResult, gotResponse, err := i.Get(testCase.context, testCase.fieldID, testCase.startAt,
+			gotResult, gotResponse, err := i.Fields(testCase.context, testCase.fieldID, testCase.startAt,
 				testCase.maxResults)
 
 			if testCase.wantErr {