Repository: ctreminiom/go-atlassian
Pull request #84 (2021-11-21 04:40:29)

:truck: Moved the admin-cloud models to a dedicated shared package


Patch:
diff --git a/admin/examples/organization-policy/create/create.go b/admin/examples/organization-policy/create/create.go
deleted file mode 100644
index a36d9ad..0000000
--- a/admin/examples/organization-policy/create/create.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package main
-
-import (
-	"context"
-	"encoding/json"
-	"fmt"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	payload := &admin.OrganizationPolicyData{
-		Type: "policy",
-		Attributes: &admin.OrganizationPolicyAttributes{
-			Type:   "data-residency", //ip-allowlist
-			Name:   "SCIMUserNameScheme of this Policy",
-			Status: "enabled", //disabled
-		},
-	}
-
-	var organizationID = "9a1jj823-jac8-123d-jj01-63315k059cb2"
-
-	newPolicy, response, err := cloudAdmin.Organization.Policy.Create(context.Background(), organizationID, payload)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-
-	policyAsJSONKeys, err := json.MarshalIndent(newPolicy, "", "  ")
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	fmt.Printf("MarshalIndent Struct keys output\n %s\n", string(policyAsJSONKeys))
-
-	fmt.Println(payload)
-
-}
diff --git a/admin/examples/organization-policy/delete/delete.go b/admin/examples/organization-policy/delete/delete.go
deleted file mode 100644
index 40b13e0..0000000
--- a/admin/examples/organization-policy/delete/delete.go
+++ /dev/null
@@ -1,39 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		organizationID = "9a1jj823-jac8-123d-jj01-63315k059cb2"
-		policyID       = "eaffa6f0-eb42-4b09-b2fb-0c7932187783"
-	)
-
-	response, err := cloudAdmin.Organization.Policy.Delete(context.Background(), organizationID, policyID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-
-}
diff --git a/admin/examples/organization-policy/get/get.go b/admin/examples/organization-policy/get/get.go
deleted file mode 100644
index 72e3c65..0000000
--- a/admin/examples/organization-policy/get/get.go
+++ /dev/null
@@ -1,41 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		organizationID = "9a1jj823-jac8-123d-jj01-63315k059cb2"
-		policyID       = "60f0f660-be3e-4d70-bd34-9c2858ec040f"
-	)
-
-	policy, response, err := cloudAdmin.Organization.Policy.Get(context.Background(), organizationID, policyID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-
-	log.Println(policy.Data.Type, policy.Data.ID, policy.Data.Attributes)
-
-}
diff --git a/admin/examples/organization-policy/gets/gets.go b/admin/examples/organization-policy/gets/gets.go
deleted file mode 100644
index c9670b5..0000000
--- a/admin/examples/organization-policy/gets/gets.go
+++ /dev/null
@@ -1,67 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"net/url"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		organizationID = "9a1jj823-jac8-123d-jj01-63315k059cb2"
-		policyType     = ""
-		policyChunks   []*admin.OrganizationPolicyPageScheme
-		cursor         string
-	)
-
-	for {
-
-		policies, response, err := cloudAdmin.Organization.Policy.Gets(context.Background(), organizationID, policyType, cursor)
-		if err != nil {
-			if response != nil {
-				log.Println("Response HTTP Response", response.Bytes.String())
-			}
-			log.Fatal(err)
-		}
-
-		log.Println("Response HTTP Code", response.Code)
-		log.Println("HTTP Endpoint Used", response.Endpoint)
-		policyChunks = append(policyChunks, policies)
-
-		if len(policies.Links.Next) == 0 {
-			break
-		}
-
-		//extract the next cursor pagination
-		nextAsURL, err := url.Parse(policies.Links.Next)
-		if err != nil {
-			log.Fatal(err)
-		}
-
-		cursor = nextAsURL.Query().Get("cursor")
-	}
-
-	for _, chunk := range policyChunks {
-
-		for _, policy := range chunk.Data {
-
-			log.Println(policy.ID, policy.Type, policy.Attributes.Status)
-		}
-
-	}
-
-}
diff --git a/admin/examples/organization-policy/update/update.go b/admin/examples/organization-policy/update/update.go
deleted file mode 100644
index ee5694a..0000000
--- a/admin/examples/organization-policy/update/update.go
+++ /dev/null
@@ -1,54 +0,0 @@
-package main
-
-import (
-	"context"
-	"encoding/json"
-	"fmt"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	payload := &admin.OrganizationPolicyData{
-		Type: "policy",
-		Attributes: &admin.OrganizationPolicyAttributes{
-			Status: "disabled", //disabled
-		},
-	}
-
-	var (
-		organizationID = "9a1jj823-jac8-123d-jj01-63315k059cb2"
-		policyID       = "eaffa6f0-eb42-4b09-b2fb-0c7932187783"
-	)
-
-	policy, response, err := cloudAdmin.Organization.Policy.Update(context.Background(), organizationID, policyID, payload)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-
-	policyAsJSONKeys, err := json.MarshalIndent(policy, "", "  ")
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	fmt.Printf("MarshalIndent Struct keys output\n %s\n", string(policyAsJSONKeys))
-}
diff --git a/admin/examples/organization/actions/actions.go b/admin/examples/organization/actions/actions.go
deleted file mode 100644
index cb69bb6..0000000
--- a/admin/examples/organization/actions/actions.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var organizationID = "9a1jj823-jac8-123d-jj01-63315k059cb2"
-
-	actions, response, err := cloudAdmin.Organization.Actions(context.Background(), organizationID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-
-	for _, action := range actions.Data {
-		log.Println(action.ID, action.Type, action.Attributes.DisplayName)
-	}
-
-}
diff --git a/admin/examples/organization/domain/domain.go b/admin/examples/organization/domain/domain.go
deleted file mode 100644
index 51cb4c5..0000000
--- a/admin/examples/organization/domain/domain.go
+++ /dev/null
@@ -1,39 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		organizationID = "9a1jj823-jac8-123d-jj01-63315k059cb2"
-		domainID       = "go-atlassian.io"
-	)
-
-	domain, response, err := cloudAdmin.Organization.Domain(context.Background(), organizationID, domainID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-	log.Println(domain.Data.Attributes.Name, domain.Data.Attributes.Claim.Status)
-}
diff --git a/admin/examples/organization/domains/domains.go b/admin/examples/organization/domains/domains.go
deleted file mode 100644
index 1371cda..0000000
--- a/admin/examples/organization/domains/domains.go
+++ /dev/null
@@ -1,65 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"net/url"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		organizationID = "9a1jj823-jac8-123d-jj01-63315k059cb2"
-		cursor         string
-		domainChunks   []*admin.OrganizationDomainPageScheme
-	)
-
-	for {
-
-		domains, response, err := cloudAdmin.Organization.Domains(context.Background(), organizationID, cursor)
-		if err != nil {
-			if response != nil {
-				log.Println("Response HTTP Response", response.Bytes.String())
-			}
-			log.Fatal(err)
-		}
-
-		log.Println("Response HTTP Code", response.Code)
-		log.Println("HTTP Endpoint Used", response.Endpoint)
-		domainChunks = append(domainChunks, domains)
-
-		if len(domains.Links.Next) == 0 {
-			break
-		}
-
-		//extract the next cursor pagination
-		nextAsURL, err := url.Parse(domains.Links.Next)
-		if err != nil {
-			log.Fatal(err)
-		}
-
-		cursor = nextAsURL.Query().Get("cursor")
-	}
-
-	for _, chunk := range domainChunks {
-
-		for _, domain := range chunk.Data {
-			log.Println(domain.ID, domain.Attributes.Name, domain.Attributes.Claim.Status)
-		}
-
-	}
-
-}
diff --git a/admin/examples/organization/event/event.go b/admin/examples/organization/event/event.go
deleted file mode 100644
index ff53907..0000000
--- a/admin/examples/organization/event/event.go
+++ /dev/null
@@ -1,39 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		organizationID = "9a1jj823-jac8-123d-jj01-63315k059cb2"
-		eventID        = "002ca68b-50b6-47c7-b985-566944bc89e8"
-	)
-
-	event, response, err := cloudAdmin.Organization.Event(context.Background(), organizationID, eventID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-	log.Println(event.Data.ID, event.Data.Attributes.Action, event.Data.Attributes.Time)
-}
diff --git a/admin/examples/organization/events/events.go b/admin/examples/organization/events/events.go
deleted file mode 100644
index 246fe2c..0000000
--- a/admin/examples/organization/events/events.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"net/url"
-	"os"
-	"time"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		organizationID = "9a1jj823-jac8-123d-jj01-63315k059cb2"
-		cursor         string
-		eventChunks    []*admin.OrganizationEventPageScheme
-	)
-
-	for {
-
-		opts := &admin.OrganizationEventOptScheme{
-			Q:      "",
-			From:   time.Now().Add(time.Duration(-24) * time.Hour),
-			To:     time.Time{},
-			Action: "",
-		}
-
-		events, response, err := cloudAdmin.Organization.Events(context.Background(), organizationID, opts, cursor)
-		if err != nil {
-			if response != nil {
-				log.Println("Response HTTP Response", response.Bytes.String())
-			}
-			log.Fatal(err)
-		}
-
-		log.Println("Response HTTP Code", response.Code)
-		log.Println("HTTP Endpoint Used", response.Endpoint)
-		eventChunks = append(eventChunks, events)
-
-		if len(events.Links.Next) == 0 {
-			break
-		}
-
-		//extract the next cursor pagination
-		nextAsURL, err := url.Parse(events.Links.Next)
-		if err != nil {
-			log.Fatal(err)
-		}
-
-		cursor = nextAsURL.Query().Get("cursor")
-	}
-
-	for _, chunk := range eventChunks {
-
-		for _, event := range chunk.Data {
-			log.Println(event.ID, event.Attributes.Action, event.Attributes.Time)
-		}
-
-	}
-
-}
diff --git a/admin/examples/organization/get/get.go b/admin/examples/organization/get/get.go
deleted file mode 100644
index b12fbab..0000000
--- a/admin/examples/organization/get/get.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var organizationID = "9a1jj823-jac8-123d-jj01-63315k059cb2"
-
-	organization, response, err := cloudAdmin.Organization.Get(context.Background(), organizationID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-	log.Println(organization.Data.ID)
-}
diff --git a/admin/examples/organization/gets/gets.go b/admin/examples/organization/gets/gets.go
deleted file mode 100644
index 5cfbccf..0000000
--- a/admin/examples/organization/gets/gets.go
+++ /dev/null
@@ -1,37 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	organizations, response, err := cloudAdmin.Organization.Gets(context.Background(), "")
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-
-	for _, organization := range organizations.Data {
-		log.Println(organization.ID, organization.Attributes.Name)
-	}
-}
diff --git a/admin/examples/organization/users/users.go b/admin/examples/organization/users/users.go
deleted file mode 100644
index 1d8c108..0000000
--- a/admin/examples/organization/users/users.go
+++ /dev/null
@@ -1,66 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"net/url"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		organizationID = "9a1jj823-jac8-123d-jj01-63315k059cb2"
-		cursor         string
-		userChunks     []*admin.OrganizationUserPageScheme
-	)
-
-	for {
-
-		users, response, err := cloudAdmin.Organization.Users(context.Background(), organizationID, cursor)
-		if err != nil {
-			if response != nil {
-				log.Println("Response HTTP Response", response.Bytes.String())
-			}
-			log.Fatal(err)
-		}
-
-		log.Println("Response HTTP Code", response.Code)
-		log.Println("HTTP Endpoint Used", response.Endpoint)
-
-		userChunks = append(userChunks, users)
-
-		if len(users.Links.Next) == 0 {
-			break
-		}
-
-		//extract the next cursor pagination
-		nextAsURL, err := url.Parse(users.Links.Next)
-		if err != nil {
-			log.Fatal(err)
-		}
-
-		cursor = nextAsURL.Query().Get("cursor")
-	}
-
-	for _, chunk := range userChunks {
-
-		for _, user := range chunk.Data {
-			log.Println(user.Email, user.Name)
-		}
-
-	}
-
-}
diff --git a/admin/examples/scim-group/create/create.go b/admin/examples/scim-group/create/create.go
deleted file mode 100644
index 0273d6c..0000000
--- a/admin/examples/scim-group/create/create.go
+++ /dev/null
@@ -1,39 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var scimApiKey = os.Getenv("ATLASSIAN_SCIM_API_KEY")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(scimApiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		directoryID  = "bcdde508-ee40-4df2-89cc-d3f6292c5971"
-		newGroupName = "scim-jira-users"
-	)
-
-	group, response, err := cloudAdmin.SCIM.Group.Create(context.Background(), directoryID, newGroupName)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-	log.Printf("The group %v has been created and it contains the ID %v", group.DisplayName, group.ID)
-}
diff --git a/admin/examples/scim-group/delete/delete.go b/admin/examples/scim-group/delete/delete.go
deleted file mode 100644
index 8236e00..0000000
--- a/admin/examples/scim-group/delete/delete.go
+++ /dev/null
@@ -1,38 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var scimApiKey = os.Getenv("ATLASSIAN_SCIM_API_KEY")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(scimApiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		directoryID = "bcdde508-ee40-4df2-89cc-d3f6292c5971"
-		groupID     = "e18da5e4-ba2e-4039-9046-30000af6c0b7"
-	)
-
-	response, err := cloudAdmin.SCIM.Group.Delete(context.Background(), directoryID, groupID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-}
diff --git a/admin/examples/scim-group/get/get.go b/admin/examples/scim-group/get/get.go
deleted file mode 100644
index e7a7d2e..0000000
--- a/admin/examples/scim-group/get/get.go
+++ /dev/null
@@ -1,43 +0,0 @@
-package main
-
-import (
-	"context"
-	"fmt"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var scimApiKey = os.Getenv("ATLASSIAN_SCIM_API_KEY")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(scimApiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		directoryID = "bcdde508-ee40-4df2-89cc-d3f6292c5971"
-		groupID     = "e18da5e4-ba2e-4039-9046-30000af6c0b7"
-	)
-
-	group, response, err := cloudAdmin.SCIM.Group.Get(context.Background(), directoryID, groupID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-	log.Println(group)
-
-	fmt.Println(response.Bytes.String())
-
-}
diff --git a/admin/examples/scim-group/gets/gets.go b/admin/examples/scim-group/gets/gets.go
deleted file mode 100644
index cfef2bc..0000000
--- a/admin/examples/scim-group/gets/gets.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var scimApiKey = os.Getenv("ATLASSIAN_SCIM_API_KEY")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(scimApiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var directoryID = "bcdde508-ee40-4df2-89cc-d3f6292c5971"
-
-	groups, response, err := cloudAdmin.SCIM.Group.Gets(context.Background(), directoryID, "", 0, 50)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-
-	for _, group := range groups.Resources {
-		log.Println(group)
-	}
-
-}
diff --git a/admin/examples/scim-group/path/path.go b/admin/examples/scim-group/path/path.go
deleted file mode 100644
index 230c209..0000000
--- a/admin/examples/scim-group/path/path.go
+++ /dev/null
@@ -1,62 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var scimApiKey = os.Getenv("ATLASSIAN_SCIM_API_KEY")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(scimApiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		directoryID = "bcdde508-ee40-4df2-89cc-d3f6292c5971"
-		groupID     = "e18da5e4-ba2e-4039-9046-30000af6c0b7"
-		accountID   = "635cdb2f-e72c-4122-bfd3-3aa6c7f02f96"
-	)
-
-	payload := &admin.SCIMGroupPathScheme{
-		Schemas: []string{"urn:ietf:params:scim:api:messages:2.0:PatchOp"},
-		Operations: []*admin.SCIMGroupOperationScheme{
-			{
-				Op:   "add",
-				Path: "members",
-				Value: []*admin.SCIMGroupOperationValueScheme{
-					{
-						Value:   accountID,
-						Display: "Example Display Name",
-					},
-				},
-			},
-		},
-	}
-
-	group, response, err := cloudAdmin.SCIM.Group.Path(context.Background(), directoryID, groupID, payload)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-
-	log.Println(group.ID, group.DisplayName)
-
-	for _, member := range group.Members {
-		log.Println(member)
-	}
-
-}
diff --git a/admin/examples/scim-group/update/update.go b/admin/examples/scim-group/update/update.go
deleted file mode 100644
index 100d054..0000000
--- a/admin/examples/scim-group/update/update.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var scimApiKey = os.Getenv("ATLASSIAN_SCIM_API_KEY")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(scimApiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		directoryID  = "bcdde508-ee40-4df2-89cc-d3f6292c5971"
-		groupID      = "e18da5e4-ba2e-4039-9046-30000af6c0b7"
-		newGroupName = "scim-jira-users-updated"
-	)
-
-	group, response, err := cloudAdmin.SCIM.Group.Update(context.Background(), directoryID, groupID, newGroupName)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-	log.Println(group)
-}
diff --git a/admin/examples/scim-scheme/enterprise/enterprise.go b/admin/examples/scim-scheme/enterprise/enterprise.go
deleted file mode 100644
index fb6a564..0000000
--- a/admin/examples/scim-scheme/enterprise/enterprise.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var scimApiKey = os.Getenv("ATLASSIAN_SCIM_API_KEY")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(scimApiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var directoryID = "bcdde508-ee40-4df2-89cc-d3f6292c5971"
-
-	enterpriseSchemas, response, err := cloudAdmin.SCIM.Scheme.Enterprise(context.Background(), directoryID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-
-	for _, schema := range enterpriseSchemas.Attributes {
-		log.Println(schema)
-	}
-
-}
diff --git a/admin/examples/scim-scheme/feature/feature.go b/admin/examples/scim-scheme/feature/feature.go
deleted file mode 100644
index 05a4725..0000000
--- a/admin/examples/scim-scheme/feature/feature.go
+++ /dev/null
@@ -1,37 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var scimApiKey = os.Getenv("ATLASSIAN_SCIM_API_KEY")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(scimApiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var directoryID = "bcdde508-ee40-4df2-89cc-d3f6292c5971"
-
-	serviceProvider, response, err := cloudAdmin.SCIM.Scheme.Feature(context.Background(), directoryID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-	log.Println(serviceProvider)
-
-}
diff --git a/admin/examples/scim-scheme/gets/gets.go b/admin/examples/scim-scheme/gets/gets.go
deleted file mode 100644
index 99a5273..0000000
--- a/admin/examples/scim-scheme/gets/gets.go
+++ /dev/null
@@ -1,37 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var scimApiKey = os.Getenv("ATLASSIAN_SCIM_API_KEY")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(scimApiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var directoryID = "bcdde508-ee40-4df2-89cc-d3f6292c5971"
-
-	schemas, response, err := cloudAdmin.SCIM.Scheme.Gets(context.Background(), directoryID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-	log.Println(schemas)
-
-}
diff --git a/admin/examples/scim-scheme/group/group.go b/admin/examples/scim-scheme/group/group.go
deleted file mode 100644
index 12cf9ec..0000000
--- a/admin/examples/scim-scheme/group/group.go
+++ /dev/null
@@ -1,61 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var scimApiKey = os.Getenv("ATLASSIAN_SCIM_API_KEY")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(scimApiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var directoryID = "bcdde508-ee40-4df2-89cc-d3f6292c5971"
-
-	schemas, response, err := cloudAdmin.SCIM.Scheme.Group(context.Background(), directoryID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-
-	for _, attribute := range schemas.Attributes {
-		log.Println("----------------------")
-		log.Println("Type", attribute.Type)
-		log.Println("Description", attribute.Description)
-		log.Println("Name", attribute.Name)
-		log.Println("Required", attribute.Required)
-		log.Println("Returned", attribute.Returned)
-		log.Println("Mutability", attribute.Mutability)
-		log.Println("SubAttributes", len(attribute.SubAttributes))
-
-		for _, subAttribute := range attribute.SubAttributes {
-			log.Println("==============================")
-			log.Println("==", subAttribute.Uniqueness)
-			log.Println("==", subAttribute.Mutability)
-			log.Println("==", subAttribute.Returned)
-			log.Println("==", subAttribute.Required)
-			log.Println("==", subAttribute.Name)
-			log.Println("==", subAttribute.Description)
-			log.Println("==============================")
-
-		}
-
-		log.Println("----------------------")
-
-	}
-}
diff --git a/admin/examples/scim-scheme/user/user.go b/admin/examples/scim-scheme/user/user.go
deleted file mode 100644
index aa166c1..0000000
--- a/admin/examples/scim-scheme/user/user.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var scimApiKey = os.Getenv("ATLASSIAN_SCIM_API_KEY")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(scimApiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var directoryID = "bcdde508-ee40-4df2-89cc-d3f6292c5971"
-
-	schemas, response, err := cloudAdmin.SCIM.Scheme.User(context.Background(), directoryID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-	log.Println(schemas)
-}
diff --git a/admin/examples/scim-user/create/create.go b/admin/examples/scim-user/create/create.go
deleted file mode 100644
index bfa1d47..0000000
--- a/admin/examples/scim-user/create/create.go
+++ /dev/null
@@ -1,62 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var scimApiKey = os.Getenv("ATLASSIAN_SCIM_API_KEY")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(scimApiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var directoryID = "bcdde508-ee40-4df2-89cc-d3f6292c5971"
-
-	var payload = &admin.SCIMUserScheme{
-		UserName: "Example Username 3",
-		Emails: []*admin.SCIMUserEmailScheme{
-			{
-				Value:   "example-2@go-atlassian.io",
-				Type:    "work",
-				Primary: true,
-			},
-		},
-		Name: &admin.SCIMUserNameScheme{
-			Formatted:       "Example Full Name with Last Name",
-			FamilyName:      "Example Family Name",
-			GivenName:       "Example Name",
-			MiddleName:      "Name",
-			HonorificPrefix: "",
-			HonorificSuffix: "",
-		},
-
-		DisplayName:       "Example Display Name 3",
-		NickName:          "Example NickName",
-		Title:             "Atlassian Administrator",
-		PreferredLanguage: "en-US",
-		Active:            true,
-	}
-
-	newUser, response, err := cloudAdmin.SCIM.User.Create(context.Background(), directoryID, payload, nil, nil)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-	log.Println(newUser.ID)
-
-}
diff --git a/admin/examples/scim-user/deactivate/deactivate.go b/admin/examples/scim-user/deactivate/deactivate.go
deleted file mode 100644
index 4dfa9ab..0000000
--- a/admin/examples/scim-user/deactivate/deactivate.go
+++ /dev/null
@@ -1,38 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var scimApiKey = os.Getenv("ATLASSIAN_SCIM_API_KEY")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(scimApiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		directoryID = "bcdde508-ee40-4df2-89cc-d3f6292c5971"
-		userID      = "ef5ff80e-9ca6-449c-8cca-5b621085c6c9"
-	)
-
-	response, err := cloudAdmin.SCIM.User.Deactivate(context.Background(), directoryID, userID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-}
diff --git a/admin/examples/scim-user/get/get.go b/admin/examples/scim-user/get/get.go
deleted file mode 100644
index c56dff5..0000000
--- a/admin/examples/scim-user/get/get.go
+++ /dev/null
@@ -1,41 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var scimApiKey = os.Getenv("ATLASSIAN_SCIM_API_KEY")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(scimApiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		directoryID = "bcdde508-ee40-4df2-89cc-d3f6292c5971"
-		userID      = "ef5ff80e-9ca6-449c-8cca-5b621085c6c9"
-	)
-
-	user, response, err := cloudAdmin.SCIM.User.Get(context.Background(), directoryID, userID, nil, nil)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-	log.Println(user.UserName)
-	log.Println(user.Name)
-
-}
diff --git a/admin/examples/scim-user/gets/gets.go b/admin/examples/scim-user/gets/gets.go
deleted file mode 100644
index 679c66f..0000000
--- a/admin/examples/scim-user/gets/gets.go
+++ /dev/null
@@ -1,47 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var scimApiKey = os.Getenv("ATLASSIAN_SCIM_API_KEY")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(scimApiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var directoryID = "bcdde508-ee40-4df2-89cc-d3f6292c5971"
-
-	options := &admin.SCIMUserGetsOptionsScheme{
-		Attributes:         nil,
-		ExcludedAttributes: nil,
-		Filter:             "",
-	}
-
-	users, response, err := cloudAdmin.SCIM.User.Gets(context.Background(), directoryID, options, 0, 50)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-
-	for _, user := range users.Resources {
-		log.Println(user.ID, user.UserName)
-	}
-
-	log.Println(users.ItemsPerPage, users.TotalResults)
-}
diff --git a/admin/examples/scim-user/path/path.go b/admin/examples/scim-user/path/path.go
deleted file mode 100644
index a3c5d43..0000000
--- a/admin/examples/scim-user/path/path.go
+++ /dev/null
@@ -1,142 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var scimApiKey = os.Getenv("ATLASSIAN_SCIM_API_KEY")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(scimApiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		directoryID = "bcdde508-ee40-4df2-89cc-d3f6292c5971"
-		userID      = "ef5ff80e-9ca6-449c-8cca-5b621085c6c9"
-	)
-
-	payload := &admin.SCIMUserToPathScheme{
-		Schemas: []string{"urn:ietf:params:scim:api:messages:2.0:PatchOp"},
-	}
-
-	if err = payload.AddStringOperation("replace", "displayName", "Docs Atlassian DisplayName 2"); err != nil {
-		log.Fatal(err)
-	}
-
-	if err = payload.AddStringOperation("replace", "userName", "user-name-updated2"); err != nil {
-		log.Fatal(err)
-	}
-
-	if err = payload.AddBoolOperation("replace", "active", false); err != nil {
-		log.Fatal(err)
-	}
-
-	if err = payload.AddComplexOperation("add", "emails", []*admin.SCIMUserComplexOperationScheme{
-		{
-			Value:     "primary@go-atlassian.io",
-			ValueType: "work",
-			Primary:   true,
-		},
-		{
-			Value:     "second@go-atlassian.io",
-			ValueType: "other",
-			Primary:   false,
-		},
-	}); err != nil {
-		log.Fatal(err)
-	}
-
-	/*
-		payload := &admin.SCIMUserToPathScheme{
-			Schemas: []string{"urn:ietf:params:scim:api:messages:2.0:PatchOp"},
-			Operations: []*admin.SCIMUserToPathOperationScheme{
-				{
-					Op:    "replace",
-					Path:  "displayName",
-					Value: "Docs Atlassian DisplayName",
-				},
-
-				{
-					Op:    "replace",
-					Path:  "userName",
-					Value: "user-name-updated",
-				},
-				{
-					Op:    "replace",
-					Path:  "name.formatted",
-					Value: "Ms. Barbara J Jensen, III",
-				},
-				{
-					Op:    "replace",
-					Path:  "name.familyName",
-					Value: "Jensen",
-				},
-				{
-					Op:    "replace",
-					Path:  "name.givenName",
-					Value: "Barbara",
-				},
-				{
-					Op:    "replace",
-					Path:  "name.middleName",
-					Value: "Jane",
-				},
-				{
-					Op:    "replace",
-					Path:  "name.honorificPrefix",
-					Value: "Ms.",
-				},
-				{
-					Op:    "replace",
-					Path:  "name.honorificSuffix",
-					Value: "III",
-				},
-
-				{
-					Op:    "replace",
-					Path:  "nickName",
-					Value: "Bobby",
-				},
-
-				{
-					Op:    "replace",
-					Path:  "title",
-					Value: "Vice President.",
-				},
-
-				{
-					Op:    "replace",
-					Path:  "title",
-					Value: "Vice President.",
-				},
-			},
-		}
-	*/
-
-	userUpdated, response, err := cloudAdmin.SCIM.User.Path(context.Background(), directoryID, userID, payload, nil, nil)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-	log.Println(userUpdated.DisplayName)
-	log.Println(userUpdated.Active)
-
-	for _, mail := range userUpdated.Emails {
-		log.Println(mail)
-	}
-}
diff --git a/admin/examples/scim-user/update/update.go b/admin/examples/scim-user/update/update.go
deleted file mode 100644
index 5f0b52c..0000000
--- a/admin/examples/scim-user/update/update.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var scimApiKey = os.Getenv("ATLASSIAN_SCIM_API_KEY")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(scimApiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		directoryID = "bcdde508-ee40-4df2-89cc-d3f6292c5971"
-		userID      = "ef5ff80e-9ca6-449c-8cca-5b621085c6c9"
-	)
-
-	payload := &admin.SCIMUserScheme{
-		UserName:    "username-updated-with-overwrite-method",
-		DisplayName: "AA",
-		NickName:    "AA",
-		Title:       "AA",
-		Department:  "President",
-		Emails: []*admin.SCIMUserEmailScheme{
-			{
-				Value:   "carlos@go-atlassian.io",
-				Type:    "work",
-				Primary: true,
-			},
-		},
-	}
-	userUpdated, response, err := cloudAdmin.SCIM.User.Update(context.Background(), directoryID, userID, payload, nil, nil)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-	log.Println(userUpdated.DisplayName)
-	log.Println(userUpdated.Active)
-	log.Println(userUpdated.Department)
-
-}
diff --git a/admin/examples/user-token/delete/delete.go b/admin/examples/user-token/delete/delete.go
deleted file mode 100644
index a669e9d..0000000
--- a/admin/examples/user-token/delete/delete.go
+++ /dev/null
@@ -1,38 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		accountID = "5e5f6a63157ed50cd2b9eaca"
-		tokenID   = "asp_A0T8NbvnwgyVkw3K"
-	)
-
-	response, err := cloudAdmin.User.Token.Delete(context.Background(), accountID, tokenID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-}
diff --git a/admin/examples/user-token/gets/gets.go b/admin/examples/user-token/gets/gets.go
deleted file mode 100644
index e226d9f..0000000
--- a/admin/examples/user-token/gets/gets.go
+++ /dev/null
@@ -1,39 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var accountID = "606a7ff396e8d60068a5c652"
-
-	tokens, response, err := cloudAdmin.User.Token.Gets(context.Background(), accountID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-
-	for _, token := range *tokens {
-		log.Println(token.ID, token.Label, token.CreatedAt, token.LastAccess)
-	}
-}
diff --git a/admin/examples/user/disable/disable.go b/admin/examples/user/disable/disable.go
deleted file mode 100644
index dabaf7a..0000000
--- a/admin/examples/user/disable/disable.go
+++ /dev/null
@@ -1,41 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	/*
-		--------- NOTE ---------
-		You can only disable an account if it's not related to a SCIM integration (GSUITE)
-		--------- NOTE ---------
-	*/
-
-	var accountID = "5e5f6a63157ed50cd2b9eaca"
-
-	response, err := cloudAdmin.User.Disable(context.Background(), accountID, "Sample message")
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-}
diff --git a/admin/examples/user/enable/enable.go b/admin/examples/user/enable/enable.go
deleted file mode 100644
index 883dbbf..0000000
--- a/admin/examples/user/enable/enable.go
+++ /dev/null
@@ -1,42 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	/*
-		--------- NOTE ---------
-		You can only enable an account if it's not related to a SCIM integration (GSUITE)
-		--------- NOTE ---------
-	*/
-
-	var accountID = "5e5f6a63157ed50cd2b9eaca"
-
-	response, err := cloudAdmin.User.Enable(context.Background(), accountID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-
-}
diff --git a/admin/examples/user/get/get.go b/admin/examples/user/get/get.go
deleted file mode 100644
index 37c2527..0000000
--- a/admin/examples/user/get/get.go
+++ /dev/null
@@ -1,37 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var accountID = "606a7ff396e8d60068a5c652"
-
-	user, response, err := cloudAdmin.User.Get(context.Background(), accountID)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-
-	log.Println(user.Account.Name, user.Account.AccountType)
-}
diff --git a/admin/examples/user/permissions/permissions.go b/admin/examples/user/permissions/permissions.go
deleted file mode 100644
index 8df2c39..0000000
--- a/admin/examples/user/permissions/permissions.go
+++ /dev/null
@@ -1,38 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var accountID = "606a7ff396e8d60068a5c652"
-
-	permissions, response, err := cloudAdmin.User.Permissions(context.Background(), accountID, nil)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-
-	log.Println(permissions.APITokenDelete.Allowed)
-	log.Println(permissions.EmailSet.Allowed)
-}
diff --git a/admin/examples/user/update/update.go b/admin/examples/user/update/update.go
deleted file mode 100644
index 275db6d..0000000
--- a/admin/examples/user/update/update.go
+++ /dev/null
@@ -1,49 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/admin"
-	"log"
-	"os"
-)
-
-func main() {
-
-	//ATLASSIAN_ADMIN_TOKEN
-	var apiKey = os.Getenv("ATLASSIAN_ADMIN_TOKEN")
-
-	cloudAdmin, err := admin.New(nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	cloudAdmin.Auth.SetBearerToken(apiKey)
-	cloudAdmin.Auth.SetUserAgent("curl/7.54.0")
-
-	var accountID = "5e5f6a63157ed50cd2b9eaca"
-
-	/*
-		-------------- NOTE --------------
-		The fields the endpoint can edit depends how you configured the user provisioning, for example:
-		If the provisioning is made using the GSuite integration or the SCIM connector, you won't be able to
-		edit that field using this endpoint because that field is blocked.
-
-		You can check the availability using the Permission method and searching on the tag permissions.EmailSet.Allowed
-		-------------- NOTE --------------
-	*/
-	var payload = make(map[string]interface{})
-	payload["nickname"] = "marshmallow"
-
-	userUpdated, response, err := cloudAdmin.User.Update(context.Background(), accountID, payload)
-	if err != nil {
-		if response != nil {
-			log.Println("Response HTTP Response", response.Bytes.String())
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Response HTTP Code", response.Code)
-	log.Println("HTTP Endpoint Used", response.Endpoint)
-	log.Println("New NickName, ", userUpdated.Account.Nickname)
-
-}
diff --git a/admin/organization.go b/admin/organization.go
index 0dd105f..0318ce8 100644
--- a/admin/organization.go
+++ b/admin/organization.go
@@ -3,11 +3,11 @@ package admin
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
-	"time"
 )
 
 type OrganizationService struct {
@@ -18,7 +18,7 @@ type OrganizationService struct {
 // Gets returns a list of your organizations
 // Official Docs: https://developer.atlassian.com/cloud/admin/organization/rest/api-group-orgs/#api-orgs-get
 // Library Example: https://docs.go-atlassian.io/atlassian-admin-cloud/organization#get-organizations
-func (o *OrganizationService) Gets(ctx context.Context, cursor string) (result *OrganizationPageScheme,
+func (o *OrganizationService) Gets(ctx context.Context, cursor string) (result *model.AdminOrganizationPageScheme,
 	response *ResponseScheme, err error) {
 
 	params := url.Values{}
@@ -51,11 +51,11 @@ func (o *OrganizationService) Gets(ctx context.Context, cursor string) (result *
 // Get returns information about a single organization by ID
 // Official Docs: https://developer.atlassian.com/cloud/admin/organization/rest/api-group-orgs/#api-orgs-orgid-get
 // Library Example: https://docs.go-atlassian.io/atlassian-admin-cloud/organization#get-an-organization-by-id
-func (o *OrganizationService) Get(ctx context.Context, organizationID string) (result *OrganizationScheme,
+func (o *OrganizationService) Get(ctx context.Context, organizationID string) (result *model.AdminOrganizationScheme,
 	response *ResponseScheme, err error) {
 
 	if len(organizationID) == 0 {
-		return nil, nil, notOrganizationError
+		return nil, nil, model.ErrNoAdminOrganizationError
 	}
 
 	var endpoint = fmt.Sprintf("/admin/v1/orgs/%v", organizationID)
@@ -75,56 +75,14 @@ func (o *OrganizationService) Get(ctx context.Context, organizationID string) (r
 	return
 }
 
-type OrganizationPageScheme struct {
-	Data  []*OrganizationModelScheme `json:"data,omitempty"`
-	Links *LinkPageModelScheme       `json:"links,omitempty"`
-}
-
-type LinkPageModelScheme struct {
-	Self string `json:"self,omitempty"`
-	Prev string `json:"prev,omitempty"`
-	Next string `json:"next,omitempty"`
-}
-
-type OrganizationModelScheme struct {
-	ID            string                          `json:"id,omitempty"`
-	Type          string                          `json:"type,omitempty"`
-	Attributes    *OrganizationModelAttribute     `json:"attributes,omitempty"`
-	Relationships *OrganizationModelRelationships `json:"relationships,omitempty"`
-	Links         *LinkSelfModelScheme            `json:"links,omitempty"`
-}
-
-type OrganizationModelAttribute struct {
-	Name string `json:"name,omitempty"`
-}
-
-type OrganizationModelRelationships struct {
-	Domains *OrganizationModelSchemes `json:"domains,omitempty"`
-	Users   *OrganizationModelSchemes `json:"users,omitempty"`
-}
-
-type OrganizationModelSchemes struct {
-	Links struct {
-		Related string `json:"related,omitempty"`
-	} `json:"links,omitempty"`
-}
-
-type LinkSelfModelScheme struct {
-	Self string `json:"self,omitempty"`
-}
-
-type OrganizationScheme struct {
-	Data *OrganizationModelScheme `json:"data,omitempty"`
-}
-
 // Users returns a list of users in an organization
 // Official Docs: https://developer.atlassian.com/cloud/admin/organization/rest/api-group-orgs/#api-orgs-orgid-users-get
 // Library Example: https://docs.go-atlassian.io/atlassian-admin-cloud/organization#get-users-in-an-organization
-func (o *OrganizationService) Users(ctx context.Context, organizationID, cursor string) (result *OrganizationUserPageScheme,
+func (o *OrganizationService) Users(ctx context.Context, organizationID, cursor string) (result *model.OrganizationUserPageScheme,
 	response *ResponseScheme, err error) {
 
 	if len(organizationID) == 0 {
-		return nil, nil, notOrganizationError
+		return nil, nil, model.ErrNoAdminOrganizationError
 	}
 
 	params := url.Values{}
@@ -154,42 +112,14 @@ func (o *OrganizationService) Users(ctx context.Context, organizationID, cursor
 	return
 }
 
-type OrganizationUserPageScheme struct {
-	Data  []*OrganizationUserScheme `json:"data,omitempty"`
-	Links *LinkPageModelScheme      `json:"links,omitempty"`
-	Meta  struct {
-		Total int `json:"total,omitempty"`
-	} `json:"meta,omitempty"`
-}
-
-type OrganizationUserScheme struct {
-	AccountID      string                           `json:"account_id,omitempty"`
-	AccountType    string                           `json:"account_type,omitempty"`
-	AccountStatus  string                           `json:"account_status,omitempty"`
-	Name           string                           `json:"name,omitempty"`
-	Picture        string                           `json:"picture,omitempty"`
-	Email          string                           `json:"email,omitempty"`
-	AccessBillable bool                             `json:"access_billable,omitempty"`
-	LastActive     string                           `json:"last_active,omitempty"`
-	ProductAccess  []*OrganizationUserProductScheme `json:"product_access,omitempty"`
-	Links          *LinkSelfModelScheme             `json:"links,omitempty"`
-}
-
-type OrganizationUserProductScheme struct {
-	Key        string `json:"key,omitempty"`
-	Name       string `json:"name,omitempty"`
-	URL        string `json:"url,omitempty"`
-	LastActive string `json:"last_active,omitempty"`
-}
-
 // Domains returns a list of domains in an organization one page at a time
 // Official Docs: https://developer.atlassian.com/cloud/admin/organization/rest/api-group-orgs/#api-orgs-orgid-domains-get
 // Library Example: https://docs.go-atlassian.io/atlassian-admin-cloud/organization#get-domains-in-an-organization
-func (o *OrganizationService) Domains(ctx context.Context, organizationID, cursor string) (result *OrganizationDomainPageScheme,
+func (o *OrganizationService) Domains(ctx context.Context, organizationID, cursor string) (result *model.OrganizationDomainPageScheme,
 	response *ResponseScheme, err error) {
 
 	if len(organizationID) == 0 {
-		return nil, nil, notOrganizationError
+		return nil, nil, model.ErrNoAdminOrganizationError
 	}
 
 	params := url.Values{}
@@ -219,36 +149,18 @@ func (o *OrganizationService) Domains(ctx context.Context, organizationID, curso
 	return
 }
 
-type OrganizationDomainPageScheme struct {
-	Data  []*OrganizationDomainModelScheme `json:"data,omitempty"`
-	Links *LinkPageModelScheme             `json:"links,omitempty"`
-}
-
-type OrganizationDomainModelScheme struct {
-	ID         string `json:"id,omitempty"`
-	Type       string `json:"type,omitempty"`
-	Attributes struct {
-		Name  string `json:"name,omitempty"`
-		Claim struct {
-			Type   string `json:"type,omitempty"`
-			Status string `json:"status,omitempty"`
-		} `json:"claim,omitempty"`
-	} `json:"attributes,omitempty"`
-	Links *LinkSelfModelScheme `json:"links,omitempty"`
-}
-
 // Domain returns information about a single verified domain by ID
 // Official Docs: https://developer.atlassian.com/cloud/admin/organization/rest/api-group-orgs/#api-orgs-orgid-domains-domainid-get
 // Library Example: https://docs.go-atlassian.io/atlassian-admin-cloud/organization#get-domain-by-id
-func (o *OrganizationService) Domain(ctx context.Context, organizationID, domainID string) (result *OrganizationDomainScheme,
+func (o *OrganizationService) Domain(ctx context.Context, organizationID, domainID string) (result *model.OrganizationDomainScheme,
 	response *ResponseScheme, err error) {
 
 	if len(organizationID) == 0 {
-		return nil, nil, notOrganizationError
+		return nil, nil, model.ErrNoAdminOrganizationError
 	}
 
 	if len(domainID) == 0 {
-		return nil, nil, notDomainError
+		return nil, nil, model.ErrNoAdminDomainIDError
 	}
 
 	var endpoint = fmt.Sprintf("/admin/v1/orgs/%v/domains/%v", organizationID, domainID)
@@ -268,38 +180,14 @@ func (o *OrganizationService) Domain(ctx context.Context, organizationID, domain
 	return
 }
 
-type OrganizationDomainScheme struct {
-	Data struct {
-		ID         string `json:"id"`
-		Type       string `json:"type"`
-		Attributes struct {
-			Name  string `json:"name"`
-			Claim struct {
-				Type   string `json:"type"`
-				Status string `json:"status"`
-			} `json:"claim"`
-		} `json:"attributes"`
-		Links struct {
-			Self string `json:"self"`
-		} `json:"links"`
-	} `json:"data"`
-}
-
-type OrganizationEventOptScheme struct {
-	Q      string    //Single query term for searching events.
-	From   time.Time //The earliest date and time of the event represented as a UNIX epoch time.
-	To     time.Time //The latest date and time of the event represented as a UNIX epoch time.
-	Action string    //A query filter that returns events of a specific action type.
-}
-
 // Events returns an audit log of events from an organization one page at a time
 // Atlassian Docs: https://developer.atlassian.com/cloud/admin/organization/rest/api-group-orgs/#api-orgs-orgid-events-get
 // Library Docs: https://docs.go-atlassian.io/atlassian-admin-cloud/organization#get-an-audit-log-of-events
-func (o *OrganizationService) Events(ctx context.Context, organizationID string, options *OrganizationEventOptScheme,
-	cursor string) (result *OrganizationEventPageScheme, response *ResponseScheme, err error) {
+func (o *OrganizationService) Events(ctx context.Context, organizationID string, options *model.OrganizationEventOptScheme,
+	cursor string) (result *model.OrganizationEventPageScheme, response *ResponseScheme, err error) {
 
 	if len(organizationID) == 0 {
-		return nil, nil, notOrganizationError
+		return nil, nil, model.ErrNoAdminOrganizationError
 	}
 
 	params := url.Values{}
@@ -351,62 +239,17 @@ func (o *OrganizationService) Events(ctx context.Context, organizationID string,
 	return
 }
 
-type OrganizationEventPageScheme struct {
-	Data  []*OrganizationEventModelScheme `json:"data,omitempty"`
-	Links *LinkPageModelScheme            `json:"links,omitempty"`
-	Meta  struct {
-		Next     string `json:"next,omitempty"`
-		PageSize int    `json:"page_size,omitempty"`
-	} `json:"meta,omitempty"`
-}
-
-type OrganizationEventModelScheme struct {
-	ID         string                                  `json:"id,omitempty"`
-	Type       string                                  `json:"type,omitempty"`
-	Attributes *OrganizationEventModelAttributesScheme `json:"attributes,omitempty"`
-	Links      *LinkSelfModelScheme                    `json:"links,omitempty"`
-}
-
-type OrganizationEventModelAttributesScheme struct {
-	Time      string                          `json:"time,omitempty"`
-	Action    string                          `json:"action,omitempty"`
-	Actor     *OrganizationEventActorModel    `json:"actor,omitempty"`
-	Context   []*OrganizationEventObjectModel `json:"context,omitempty"`
-	Container []*OrganizationEventObjectModel `json:"container,omitempty"`
-	Location  *OrganizationEventLocationModel `json:"location,omitempty"`
-}
-
-type OrganizationEventActorModel struct {
-	ID    string               `json:"id,omitempty"`
-	Name  string               `json:"name,omitempty"`
-	Links *LinkSelfModelScheme `json:"links,omitempty"`
-}
-
-type OrganizationEventObjectModel struct {
-	ID    string `json:"id,omitempty"`
-	Type  string `json:"type,omitempty"`
-	Links struct {
-		Self string `json:"self,omitempty"`
-		Alt  string `json:"alt,omitempty"`
-	} `json:"links,omitempty"`
-}
-
-type OrganizationEventLocationModel struct {
-	IP  string `json:"ip,omitempty"`
-	Geo string `json:"geo,omitempty"`
-}
-
 // Event returns information about a single event by ID.
 // Library Docs: https://docs.go-atlassian.io/atlassian-admin-cloud/organization#get-an-event-by-id
-func (o *OrganizationService) Event(ctx context.Context, organizationID, eventID string) (result *OrganizationEventScheme,
+func (o *OrganizationService) Event(ctx context.Context, organizationID, eventID string) (result *model.OrganizationEventScheme,
 	response *ResponseScheme, err error) {
 
 	if len(organizationID) == 0 {
-		return nil, nil, notOrganizationError
+		return nil, nil, model.ErrNoAdminOrganizationError
 	}
 
 	if len(eventID) == 0 {
-		return nil, nil, notEventError
+		return nil, nil, model.ErrNoEventIDError
 	}
 
 	var endpoint = fmt.Sprintf("/admin/v1/orgs/%v/events/%v", organizationID, eventID)
@@ -426,18 +269,14 @@ func (o *OrganizationService) Event(ctx context.Context, organizationID, eventID
 	return
 }
 
-type OrganizationEventScheme struct {
-	Data *OrganizationEventModelScheme `json:"data,omitempty"`
-}
-
 // Actions returns information localized event actions
 // Official Docs: https://developer.atlassian.com/cloud/admin/organization/rest/api-group-orgs/#api-orgs-orgid-event-actions-get
 // Library Example: https://docs.go-atlassian.io/atlassian-admin-cloud/organization#get-list-of-event-actions
-func (o *OrganizationService) Actions(ctx context.Context, organizationID string) (result *OrganizationEventActionScheme,
+func (o *OrganizationService) Actions(ctx context.Context, organizationID string) (result *model.OrganizationEventActionScheme,
 	response *ResponseScheme, err error) {
 
 	if len(organizationID) == 0 {
-		return nil, nil, notOrganizationError
+		return nil, nil, model.ErrNoAdminOrganizationError
 	}
 
 	var endpoint = fmt.Sprintf("/admin/v1/orgs/%v/event-actions", organizationID)
@@ -456,24 +295,3 @@ func (o *OrganizationService) Actions(ctx context.Context, organizationID string
 
 	return
 }
-
-type OrganizationEventActionScheme struct {
-	Data []*OrganizationEventActionModelScheme `json:"data,omitempty"`
-}
-
-type OrganizationEventActionModelScheme struct {
-	ID         string                                        `json:"id,omitempty"`
-	Type       string                                        `json:"type,omitempty"`
-	Attributes *OrganizationEventActionModelAttributesScheme `json:"attributes,omitempty"`
-}
-
-type OrganizationEventActionModelAttributesScheme struct {
-	DisplayName      string `json:"displayName,omitempty"`
-	GroupDisplayName string `json:"groupDisplayName,omitempty"`
-}
-
-var (
-	notOrganizationError = fmt.Errorf("error!, please provide a valid organizationID value")
-	notDomainError       = fmt.Errorf("error!, please provide a valid domainID value")
-	notEventError        = fmt.Errorf("error!, please provide a valid eventID value")
-)
diff --git a/admin/organizationPolicy.go b/admin/organizationPolicy.go
index 3ea5a96..65f0b85 100644
--- a/admin/organizationPolicy.go
+++ b/admin/organizationPolicy.go
@@ -3,10 +3,10 @@ package admin
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"net/http"
 	"net/url"
 	"strings"
-	"time"
 )
 
 type OrganizationPolicyService struct {
@@ -17,10 +17,10 @@ type OrganizationPolicyService struct {
 // Atlassian Docs: Docs: https://developer.atlassian.com/cloud/admin/organization/rest/api-group-orgs/#api-orgs-orgid-policies-get
 // Library Docs: https://docs.go-atlassian.io/atlassian-admin-cloud/organization/policy#get-list-of-policies
 func (o *OrganizationPolicyService) Gets(ctx context.Context, organizationID, policyType, cursor string) (
-	result *OrganizationPolicyPageScheme, response *ResponseScheme, err error) {
+	result *model.OrganizationPolicyPageScheme, response *ResponseScheme, err error) {
 
 	if len(organizationID) == 0 {
-		return nil, nil, notOrganizationError
+		return nil, nil, model.ErrNoAdminOrganizationError
 	}
 
 	params := url.Values{}
@@ -55,27 +55,18 @@ func (o *OrganizationPolicyService) Gets(ctx context.Context, organizationID, po
 	return
 }
 
-type OrganizationPolicyPageScheme struct {
-	Data  []*OrganizationPolicyData `json:"data"`
-	Links *LinkPageModelScheme      `json:"links"`
-	Meta  struct {
-		Next     string `json:"next"`
-		PageSize int    `json:"page_size"`
-	} `json:"meta"`
-}
-
 // Get information about a single policy by ID
 // Official Docs: https://developer.atlassian.com/cloud/admin/organization/rest/api-group-orgs/#api-orgs-orgid-policies-policyid-get
 // Example Library: https://docs.go-atlassian.io/atlassian-admin-cloud/organization/policy#get-a-policy-by-id
 func (o *OrganizationPolicyService) Get(ctx context.Context, organizationID, policyID string) (
-	result *OrganizationPolicyScheme, response *ResponseScheme, err error) {
+	result *model.OrganizationPolicyScheme, response *ResponseScheme, err error) {
 
 	if len(organizationID) == 0 {
-		return nil, nil, notOrganizationError
+		return nil, nil, model.ErrNoAdminOrganizationError
 	}
 
 	if len(policyID) == 0 {
-		return nil, nil, notPolicyError
+		return nil, nil, model.ErrNoAdminPolicyError
 	}
 
 	var endpoint = fmt.Sprintf("/admin/v1/orgs/%v/policies/%v", organizationID, policyID)
@@ -95,35 +86,14 @@ func (o *OrganizationPolicyService) Get(ctx context.Context, organizationID, pol
 	return
 }
 
-type OrganizationPolicyScheme struct {
-	Data OrganizationPolicyData `json:"data"`
-}
-type OrganizationPolicyResource struct {
-	ID                string `json:"id,omitempty"`
-	ApplicationStatus string `json:"applicationStatus,omitempty"`
-}
-type OrganizationPolicyAttributes struct {
-	Type      string                        `json:"type,omitempty"`
-	Name      string                        `json:"name,omitempty"`
-	Status    string                        `json:"status,omitempty"`
-	Resources []*OrganizationPolicyResource `json:"resources,omitempty"`
-	CreatedAt time.Time                     `json:"createdAt,omitempty"`
-	UpdatedAt time.Time                     `json:"updatedAt,omitempty"`
-}
-type OrganizationPolicyData struct {
-	ID         string                        `json:"id,omitempty"`
-	Type       string                        `json:"type,omitempty"`
-	Attributes *OrganizationPolicyAttributes `json:"attributes,omitempty"`
-}
-
 // Create a policy for an org
 // Official Docs: https://developer.atlassian.com/cloud/admin/organization/rest/api-group-orgs/#api-orgs-orgid-policies-post
 // Library Example: https://docs.go-atlassian.io/atlassian-admin-cloud/organization/policy#create-a-policy
-func (o *OrganizationPolicyService) Create(ctx context.Context, organizationID string, payload *OrganizationPolicyData) (
-	result *OrganizationPolicyScheme, response *ResponseScheme, err error) {
+func (o *OrganizationPolicyService) Create(ctx context.Context, organizationID string, payload *model.OrganizationPolicyData) (
+	result *model.OrganizationPolicyScheme, response *ResponseScheme, err error) {
 
 	if len(organizationID) == 0 {
-		return nil, nil, notOrganizationError
+		return nil, nil, model.ErrNoAdminOrganizationError
 	}
 
 	payloadAsReader, err := transformStructToReader(payload)
@@ -153,14 +123,14 @@ func (o *OrganizationPolicyService) Create(ctx context.Context, organizationID s
 // Official Docs: https://developer.atlassian.com/cloud/admin/organization/rest/api-group-orgs/#api-orgs-orgid-policies-policyid-put
 // Library Docs: https://docs.go-atlassian.io/atlassian-admin-cloud/organization/policy#update-a-policy
 func (o *OrganizationPolicyService) Update(ctx context.Context, organizationID, policyID string,
-	payload *OrganizationPolicyData) (result *OrganizationPolicyScheme, response *ResponseScheme, err error) {
+	payload *model.OrganizationPolicyData) (result *model.OrganizationPolicyScheme, response *ResponseScheme, err error) {
 
 	if len(organizationID) == 0 {
-		return nil, nil, notOrganizationError
+		return nil, nil, model.ErrNoAdminOrganizationError
 	}
 
 	if len(policyID) == 0 {
-		return nil, nil, notPolicyError
+		return nil, nil, model.ErrNoAdminPolicyError
 	}
 
 	payloadAsReader, err := transformStructToReader(payload)
@@ -193,11 +163,11 @@ func (o *OrganizationPolicyService) Delete(ctx context.Context, organizationID,
 	response *ResponseScheme, err error) {
 
 	if len(organizationID) == 0 {
-		return nil, notOrganizationError
+		return nil, model.ErrNoAdminOrganizationError
 	}
 
 	if len(policyID) == 0 {
-		return nil, notPolicyError
+		return nil, model.ErrNoAdminPolicyError
 	}
 
 	var endpoint = fmt.Sprintf("/admin/v1/orgs/%v/policies/%v", organizationID, policyID)
@@ -216,7 +186,3 @@ func (o *OrganizationPolicyService) Delete(ctx context.Context, organizationID,
 
 	return
 }
-
-var (
-	notPolicyError = fmt.Errorf("error!, please provide a valid policyID value")
-)
diff --git a/admin/scimGroup.go b/admin/scimGroup.go
index b9439d9..361d22c 100644
--- a/admin/scimGroup.go
+++ b/admin/scimGroup.go
@@ -3,6 +3,7 @@ package admin
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"net/http"
 	"net/url"
 	"strconv"
@@ -16,10 +17,10 @@ type SCIMGroupService struct{ client *Client }
 // Docs: https://docs.go-atlassian.io/atlassian-admin-cloud/scim/groups#get-groups
 // Official Docs: https://developer.atlassian.com/cloud/admin/user-provisioning/rest/api-group-groups/#api-scim-directory-directoryid-groups-get
 func (g *SCIMGroupService) Gets(ctx context.Context, directoryID, filter string, startAt, maxResults int) (
-	result *ScimGroupPageScheme, response *ResponseScheme, err error) {
+	result *model.ScimGroupPageScheme, response *ResponseScheme, err error) {
 
 	if directoryID == "" {
-		return nil, nil, notDirectoryError
+		return nil, nil, model.ErrNoAdminDirectoryIDError
 	}
 
 	params := url.Values{}
@@ -50,15 +51,15 @@ func (g *SCIMGroupService) Gets(ctx context.Context, directoryID, filter string,
 // Get a group from a directory by group ID.
 // Docs: https://docs.go-atlassian.io/atlassian-admin-cloud/scim/groups#get-a-group-by-id
 // Official Docs: https://developer.atlassian.com/cloud/admin/user-provisioning/rest/api-group-groups/#api-scim-directory-directoryid-groups-id-get
-func (g *SCIMGroupService) Get(ctx context.Context, directoryID, groupID string) (result *ScimGroupScheme,
+func (g *SCIMGroupService) Get(ctx context.Context, directoryID, groupID string) (result *model.ScimGroupScheme,
 	response *ResponseScheme, err error) {
 
 	if directoryID == "" {
-		return nil, nil, notDirectoryError
+		return nil, nil, model.ErrNoAdminDirectoryIDError
 	}
 
 	if groupID == "" {
-		return nil, nil, notGroupError
+		return nil, nil, model.ErrNoAdminGroupIDError
 	}
 
 	var endpoint = fmt.Sprintf("/scim/directory/%v/Groups/%v", directoryID, groupID)
@@ -81,19 +82,19 @@ func (g *SCIMGroupService) Get(ctx context.Context, directoryID, groupID string)
 // Update a group in a directory by group ID.
 // Docs: https://docs.go-atlassian.io/atlassian-admin-cloud/scim/groups#update-a-group-by-id
 // Official Docs: https://developer.atlassian.com/cloud/admin/user-provisioning/rest/api-group-groups/#api-scim-directory-directoryid-groups-id-put
-func (g *SCIMGroupService) Update(ctx context.Context, directoryID, groupID string, newGroupName string) (result *ScimGroupScheme,
+func (g *SCIMGroupService) Update(ctx context.Context, directoryID, groupID string, newGroupName string) (result *model.ScimGroupScheme,
 	response *ResponseScheme, err error) {
 
 	if directoryID == "" {
-		return nil, nil, notDirectoryError
+		return nil, nil, model.ErrNoAdminDirectoryIDError
 	}
 
 	if groupID == "" {
-		return nil, nil, notGroupError
+		return nil, nil, model.ErrNoAdminGroupIDError
 	}
 
 	if newGroupName == "" {
-		return nil, nil, notGroupNameError
+		return nil, nil, model.ErrNoAdminGroupNameError
 	}
 
 	var endpoint = fmt.Sprintf("/scim/directory/%v/Groups/%v", directoryID, groupID)
@@ -128,11 +129,11 @@ func (g *SCIMGroupService) Update(ctx context.Context, directoryID, groupID stri
 func (g *SCIMGroupService) Delete(ctx context.Context, directoryID, groupID string) (response *ResponseScheme, err error) {
 
 	if directoryID == "" {
-		return nil, notDirectoryError
+		return nil, model.ErrNoAdminDirectoryIDError
 	}
 
 	if groupID == "" {
-		return nil, notGroupError
+		return nil, model.ErrNoAdminGroupIDError
 	}
 
 	var endpoint = fmt.Sprintf("/scim/directory/%v/Groups/%v", directoryID, groupID)
@@ -153,15 +154,15 @@ func (g *SCIMGroupService) Delete(ctx context.Context, directoryID, groupID stri
 // Create a group in a directory. An attempt to create a group with an existing name fails with a 409 (Conflict) error.
 // Docs: https://docs.go-atlassian.io/atlassian-admin-cloud/scim/groups#create-a-group
 // Official Docs: https://developer.atlassian.com/cloud/admin/user-provisioning/rest/api-group-groups/#api-scim-directory-directoryid-groups-post
-func (g *SCIMGroupService) Create(ctx context.Context, directoryID, groupName string) (result *ScimGroupScheme,
+func (g *SCIMGroupService) Create(ctx context.Context, directoryID, groupName string) (result *model.ScimGroupScheme,
 	response *ResponseScheme, err error) {
 
 	if directoryID == "" {
-		return nil, nil, notDirectoryError
+		return nil, nil, model.ErrNoAdminDirectoryIDError
 	}
 
 	if groupName == "" {
-		return nil, nil, notGroupNameError
+		return nil, nil, model.ErrNoAdminGroupNameError
 	}
 
 	payload := struct {
@@ -194,15 +195,15 @@ func (g *SCIMGroupService) Create(ctx context.Context, directoryID, groupName st
 // You can use this API to manage group membership.
 // Docs: https://docs.go-atlassian.io/atlassian-admin-cloud/scim/groups#update-a-group-by-id-patch
 // Official Docs: https://developer.atlassian.com/cloud/admin/user-provisioning/rest/api-group-groups/#api-scim-directory-directoryid-groups-id-patch
-func (g *SCIMGroupService) Path(ctx context.Context, directoryID, groupID string, payload *SCIMGroupPathScheme) (
-	result *ScimGroupScheme, response *ResponseScheme, err error) {
+func (g *SCIMGroupService) Path(ctx context.Context, directoryID, groupID string, payload *model.SCIMGroupPathScheme) (
+	result *model.ScimGroupScheme, response *ResponseScheme, err error) {
 
 	if directoryID == "" {
-		return nil, nil, notDirectoryError
+		return nil, nil, model.ErrNoAdminDirectoryIDError
 	}
 
 	if groupID == "" {
-		return nil, nil, notGroupError
+		return nil, nil, model.ErrNoAdminGroupIDError
 	}
 
 	payloadAsReader, err := transformStructToReader(payload)
@@ -231,56 +232,3 @@ func (g *SCIMGroupService) Path(ctx context.Context, directoryID, groupID string
 
 	return
 }
-
-type SCIMGroupPathScheme struct {
-	Schemas    []string                    `json:"schemas,omitempty"`
-	Operations []*SCIMGroupOperationScheme `json:"Operations,omitempty"`
-}
-
-type SCIMGroupOperationScheme struct {
-	Op    string                           `json:"op,omitempty"`
-	Path  string                           `json:"path,omitempty"`
-	Value []*SCIMGroupOperationValueScheme `json:"value,omitempty"`
-}
-
-type SCIMGroupOperationValueScheme struct {
-	Value   string `json:"value,omitempty"`
-	Display string `json:"display,omitempty"`
-}
-
-type ScimGroupPageScheme struct {
-	Schemas      []string           `json:"schemas,omitempty"`
-	TotalResults int                `json:"totalResults,omitempty"`
-	StartIndex   int                `json:"startIndex,omitempty"`
-	ItemsPerPage int                `json:"itemsPerPage,omitempty"`
-	Resources    []*ScimGroupScheme `json:"Resources,omitempty"`
-}
-
-type ScimGroupScheme struct {
-	Schemas     []string                 `json:"schemas,omitempty"`
-	ID          string                   `json:"id,omitempty"`
-	ExternalID  string                   `json:"externalId,omitempty"`
-	DisplayName string                   `json:"displayName,omitempty"`
-	Members     []*ScimGroupMemberScheme `json:"members,omitempty"`
-	Meta        *ScimMetadata            `json:"meta,omitempty"`
-}
-
-type ScimGroupMemberScheme struct {
-	Type    string `json:"type,omitempty"`
-	Value   string `json:"value,omitempty"`
-	Display string `json:"display,omitempty"`
-	Ref     string `json:"$ref,omitempty"`
-}
-
-type ScimMetadata struct {
-	ResourceType string `json:"resourceType,omitempty"`
-	Location     string `json:"location,omitempty"`
-	LastModified string `json:"lastModified,omitempty"`
-	Created      string `json:"created,omitempty"`
-}
-
-var (
-	notDirectoryError = fmt.Errorf("error!, please provide a valid directoryID value")
-	notGroupError     = fmt.Errorf("error!, please provide a valid groupID value")
-	notGroupNameError = fmt.Errorf("error!, please provide a valid group name value")
-)
diff --git a/admin/scimScheme.go b/admin/scimScheme.go
index 44a7ce6..5912493 100644
--- a/admin/scimScheme.go
+++ b/admin/scimScheme.go
@@ -3,8 +3,8 @@ package admin
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"net/http"
-	"time"
 )
 
 type SCIMSchemeService struct{ client *Client }
@@ -12,11 +12,11 @@ type SCIMSchemeService struct{ client *Client }
 // Gets all SCIM features metadata. Filtering, pagination and sorting are not supported.
 // Atlassian Docs: https://developer.atlassian.com/cloud/admin/user-provisioning/rest/api-group-schemas/#api-scim-directory-directoryid-schemas-get
 // Library Docs: N/A
-func (s *SCIMSchemeService) Gets(ctx context.Context, directoryID string) (result *SCIMSchemasScheme,
+func (s *SCIMSchemeService) Gets(ctx context.Context, directoryID string) (result *model.SCIMSchemasScheme,
 	response *ResponseScheme, err error) {
 
 	if len(directoryID) == 0 {
-		return nil, nil, notDirectoryError
+		return nil, nil, model.ErrNoAdminDirectoryIDError
 	}
 
 	var endpoint = fmt.Sprintf("/scim/directory/%v/Schemas", directoryID)
@@ -36,60 +36,14 @@ func (s *SCIMSchemeService) Gets(ctx context.Context, directoryID string) (resul
 	return
 }
 
-type SCIMSchemasScheme struct {
-	TotalResults int               `json:"totalResults,omitempty"`
-	ItemsPerPage int               `json:"itemsPerPage,omitempty"`
-	StartIndex   int               `json:"startIndex,omitempty"`
-	Schemas      []string          `json:"schemas,omitempty"`
-	Resources    []*ResourceScheme `json:"Resources,omitempty"`
-}
-
-type ResourceScheme struct {
-	ID          string              `json:"id,omitempty"`
-	Name        string              `json:"name,omitempty"`
-	Description string              `json:"description,omitempty"`
-	Attributes  []*AttributeScheme  `json:"attributes,omitempty"`
-	Meta        *ResourceMetaScheme `json:"meta,omitempty"`
-}
-
-type ResourceMetaScheme struct {
-	ResourceType string `json:"resourceType,omitempty"`
-	Location     string `json:"location,omitempty"`
-}
-
-type AttributeScheme struct {
-	Name          string                `json:"name,omitempty"`
-	Type          string                `json:"type,omitempty"`
-	MultiValued   bool                  `json:"multiValued,omitempty"`
-	Description   string                `json:"description,omitempty"`
-	Required      bool                  `json:"required,omitempty"`
-	CaseExact     bool                  `json:"caseExact,omitempty"`
-	Mutability    string                `json:"mutability,omitempty"`
-	Returned      string                `json:"returned,omitempty"`
-	Uniqueness    string                `json:"uniqueness,omitempty"`
-	SubAttributes []*SubAttributeScheme `json:"subAttributes,omitempty"`
-}
-
-type SubAttributeScheme struct {
-	Name        string `json:"name,omitempty"`
-	Type        string `json:"type,omitempty"`
-	MultiValued bool   `json:"multiValued,omitempty"`
-	Description string `json:"description,omitempty"`
-	Required    bool   `json:"required,omitempty"`
-	CaseExact   bool   `json:"caseExact,omitempty"`
-	Mutability  string `json:"mutability,omitempty"`
-	Returned    string `json:"returned,omitempty"`
-	Uniqueness  string `json:"uniqueness,omitempty"`
-}
-
 // Group get the group schemas from the SCIM provider. Filtering, pagination and sorting are not supported.
 // Atlassian Docs: https://developer.atlassian.com/cloud/admin/user-provisioning/rest/api-group-schemas/#api-scim-directory-directoryid-schemas-urn-ietf-params-scim-schemas-core-2-0-group-get
 // Library Docs: N/A
-func (s *SCIMSchemeService) Group(ctx context.Context, directoryID string) (result *SCIMSchemaScheme,
+func (s *SCIMSchemeService) Group(ctx context.Context, directoryID string) (result *model.SCIMSchemaScheme,
 	response *ResponseScheme, err error) {
 
 	if len(directoryID) == 0 {
-		return nil, nil, notDirectoryError
+		return nil, nil, model.ErrNoAdminDirectoryIDError
 	}
 
 	var endpoint = fmt.Sprintf("/scim/directory/%v/Schemas/urn:ietf:params:scim:schemas:core:2.0:Group", directoryID)
@@ -112,11 +66,11 @@ func (s *SCIMSchemeService) Group(ctx context.Context, directoryID string) (resu
 // User get the user schemas from the SCIM provider. Filtering, pagination and sorting are not supported.
 // Atlassian Docs: https://developer.atlassian.com/cloud/admin/user-provisioning/rest/api-group-schemas/#api-scim-directory-directoryid-schemas-urn-ietf-params-scim-schemas-core-2-0-user-get
 // Library Docs: N/A
-func (s *SCIMSchemeService) User(ctx context.Context, directoryID string) (result *SCIMSchemaScheme,
+func (s *SCIMSchemeService) User(ctx context.Context, directoryID string) (result *model.SCIMSchemaScheme,
 	response *ResponseScheme, err error) {
 
 	if len(directoryID) == 0 {
-		return nil, nil, notDirectoryError
+		return nil, nil, model.ErrNoAdminDirectoryIDError
 	}
 
 	var endpoint = fmt.Sprintf("/scim/directory/%v/Schemas/urn:ietf:params:scim:schemas:core:2.0:User", directoryID)
@@ -140,11 +94,11 @@ func (s *SCIMSchemeService) User(ctx context.Context, directoryID string) (resul
 // Filtering, pagination and sorting are not supported.
 // Atlassian Docs: https://developer.atlassian.com/cloud/admin/user-provisioning/rest/api-group-schemas/#api-scim-directory-directoryid-schemas-urn-ietf-params-scim-schemas-extension-enterprise-2-0-user-get
 // Library Docs: N/A
-func (s *SCIMSchemeService) Enterprise(ctx context.Context, directoryID string) (result *SCIMSchemaScheme,
+func (s *SCIMSchemeService) Enterprise(ctx context.Context, directoryID string) (result *model.SCIMSchemaScheme,
 	response *ResponseScheme, err error) {
 
 	if len(directoryID) == 0 {
-		return nil, nil, notDirectoryError
+		return nil, nil, model.ErrNoAdminDirectoryIDError
 	}
 
 	var endpoint = fmt.Sprintf("/scim/directory/%v/Schemas/urn:ietf:params:scim:schemas:extension:enterprise:2.0:User", directoryID)
@@ -164,24 +118,16 @@ func (s *SCIMSchemeService) Enterprise(ctx context.Context, directoryID string)
 	return
 }
 
-type SCIMSchemaScheme struct {
-	ID          string              `json:"id,omitempty"`
-	Name        string              `json:"name,omitempty"`
-	Description string              `json:"description,omitempty"`
-	Attributes  []*AttributeScheme  `json:"attributes,omitempty"`
-	Meta        *ResourceMetaScheme `json:"meta,omitempty"`
-}
-
 // Feature get metadata about the supported SCIM features.
 // This is a service provider configuration endpoint providing supported SCIM features.
 // Filtering, pagination and sorting are not supported.
 // Atlassian Docs: https://developer.atlassian.com/cloud/admin/user-provisioning/rest/api-group-schemas/#api-scim-directory-directoryid-serviceproviderconfig-get
 // Library Docs: N/A
-func (s *SCIMSchemeService) Feature(ctx context.Context, directoryID string) (result *ServiceProviderConfigScheme,
+func (s *SCIMSchemeService) Feature(ctx context.Context, directoryID string) (result *model.ServiceProviderConfigScheme,
 	response *ResponseScheme, err error) {
 
 	if len(directoryID) == 0 {
-		return nil, nil, notDirectoryError
+		return nil, nil, model.ErrNoAdminDirectoryIDError
 	}
 
 	var endpoint = fmt.Sprintf("/scim/directory/%v/ServiceProviderConfig", directoryID)
@@ -200,39 +146,3 @@ func (s *SCIMSchemeService) Feature(ctx context.Context, directoryID string) (re
 
 	return
 }
-
-type ServiceProviderConfigScheme struct {
-	Schemas []string `json:"schemas"`
-	Patch   struct {
-		Supported bool `json:"supported"`
-	} `json:"patch"`
-	Bulk struct {
-		Supported      bool `json:"supported"`
-		MaxOperations  int  `json:"maxOperations"`
-		MaxPayloadSize int  `json:"maxPayloadSize"`
-	} `json:"bulk"`
-	Filter struct {
-		MaxResults int  `json:"maxResults"`
-		Supported  bool `json:"supported"`
-	} `json:"filter"`
-	ChangePassword struct {
-		Supported bool `json:"supported"`
-	} `json:"changePassword"`
-	Sort struct {
-		Supported bool `json:"supported"`
-	} `json:"sort"`
-	Etag struct {
-		Supported bool `json:"supported"`
-	} `json:"etag"`
-	AuthenticationSchemes []struct {
-		Type        string `json:"type"`
-		Name        string `json:"name"`
-		Description string `json:"description"`
-	} `json:"authenticationSchemes"`
-	Meta struct {
-		Location     string    `json:"location"`
-		ResourceType string    `json:"resourceType"`
-		LastModified time.Time `json:"lastModified"`
-		Created      time.Time `json:"created"`
-	} `json:"meta"`
-}
diff --git a/admin/scimUser.go b/admin/scimUser.go
index 8601a88..4fc70b2 100644
--- a/admin/scimUser.go
+++ b/admin/scimUser.go
@@ -3,6 +3,7 @@ package admin
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"net/http"
 	"net/url"
 	"strconv"
@@ -18,11 +19,11 @@ type SCIMUserService struct{ client *Client }
 // the user in your identity provider is linked to the user in your Atlassian organization.
 // Atlassian Docs: https://developer.atlassian.com/cloud/admin/user-provisioning/rest/api-group-users/#api-scim-directory-directoryid-users-post
 // Library Docs: https://docs.go-atlassian.io/atlassian-admin-cloud/scim/users#create-a-user
-func (s *SCIMUserService) Create(ctx context.Context, directoryID string, payload *SCIMUserScheme, attributes,
-	excludedAttributes []string) (result *SCIMUserScheme, response *ResponseScheme, err error) {
+func (s *SCIMUserService) Create(ctx context.Context, directoryID string, payload *model.SCIMUserScheme, attributes,
+	excludedAttributes []string) (result *model.SCIMUserScheme, response *ResponseScheme, err error) {
 
 	if len(directoryID) == 0 {
-		return nil, nil, notDirectoryError
+		return nil, nil, model.ErrNoAdminDirectoryIDError
 	}
 
 	payloadAsReader, err := transformStructToReader(payload)
@@ -63,85 +64,14 @@ func (s *SCIMUserService) Create(ctx context.Context, directoryID string, payloa
 	return
 }
 
-type SCIMUserScheme struct {
-	ID                string                        `json:"id"`
-	ExternalID        string                        `json:"externalId"`
-	Meta              *SCIMUserMetaScheme           `json:"meta,omitempty"`
-	Groups            []*SCIMUserGroupScheme        `json:"groups,omitempty"`
-	UserName          string                        `json:"userName,omitempty"`
-	Emails            []*SCIMUserEmailScheme        `json:"emails,omitempty"`
-	Name              *SCIMUserNameScheme           `json:"name,omitempty"`
-	DisplayName       string                        `json:"displayName,omitempty"`
-	NickName          string                        `json:"nickName,omitempty"`
-	Title             string                        `json:"title,omitempty"`
-	PreferredLanguage string                        `json:"preferredLanguage,omitempty"`
-	Department        string                        `json:"department,omitempty"`
-	Organization      string                        `json:"organization,omitempty"`
-	Timezone          string                        `json:"timezone,omitempty"`
-	PhoneNumbers      []*SCIMUserPhoneNumberScheme  `json:"phoneNumbers,omitempty"`
-	Active            bool                          `json:"active,omitempty"`
-	EnterpriseInfo    *SCIMEnterpriseUserInfoScheme `json:"urn:ietf:params:scim:schemas:extension:enterprise:2.1:User,omitempty"`
-	SCIMExtension     *SCIMExtensionScheme          `json:"urn:scim:schemas:extension:atlassian-external:1.1,omitempty"`
-}
-
-type SCIMUserEmailScheme struct {
-	Value   string `json:"value,omitempty"`
-	Type    string `json:"type,omitempty"`
-	Primary bool   `json:"primary,omitempty"`
-}
-
-type SCIMUserNameScheme struct {
-	Formatted       string `json:"formatted,omitempty"`
-	FamilyName      string `json:"familyName,omitempty"`
-	GivenName       string `json:"givenName,omitempty"`
-	MiddleName      string `json:"middleName,omitempty"`
-	HonorificPrefix string `json:"honorificPrefix,omitempty"`
-	HonorificSuffix string `json:"honorificSuffix,omitempty"`
-}
-
-type SCIMUserPhoneNumberScheme struct {
-	Value   string `json:"value,omitempty"`
-	Type    string `json:"type,omitempty"`
-	Primary bool   `json:"primary,omitempty"`
-}
-
-type SCIMUserMetaScheme struct {
-	ResourceType string `json:"resourceType,omitempty"`
-	Location     string `json:"location,omitempty"`
-	LastModified string `json:"lastModified,omitempty"`
-	Created      string `json:"created,omitempty"`
-}
-
-type SCIMUserGroupScheme struct {
-	Type    string `json:"type,omitempty"`
-	Value   string `json:"value,omitempty"`
-	Display string `json:"display,omitempty"`
-	Ref     string `json:"$ref,omitempty"`
-}
-
-type SCIMEnterpriseUserInfoScheme struct {
-	Organization string `json:"organization,omitempty"`
-	Department   string `json:"department,omitempty"`
-}
-
-type SCIMExtensionScheme struct {
-	AtlassianAccountID string `json:"atlassianAccountId,omitempty"`
-}
-
-type SCIMUserGetsOptionsScheme struct {
-	Attributes         []string
-	ExcludedAttributes []string
-	Filter             string
-}
-
 // Gets get users from the specified directory
 // Atlassian Docs: https://developer.atlassian.com/cloud/admin/user-provisioning/rest/api-group-users/#api-scim-directory-directoryid-users-get
 // Library Docs: https://docs.go-atlassian.io/atlassian-admin-cloud/scim/users#get-users
-func (s *SCIMUserService) Gets(ctx context.Context, directoryID string, opts *SCIMUserGetsOptionsScheme, startIndex,
-	count int) (result *SCIMUserPageScheme, response *ResponseScheme, err error) {
+func (s *SCIMUserService) Gets(ctx context.Context, directoryID string, opts *model.SCIMUserGetsOptionsScheme, startIndex,
+	count int) (result *model.SCIMUserPageScheme, response *ResponseScheme, err error) {
 
 	if len(directoryID) == 0 {
-		return nil, nil, notDirectoryError
+		return nil, nil, model.ErrNoAdminDirectoryIDError
 	}
 
 	params := url.Values{}
@@ -180,26 +110,18 @@ func (s *SCIMUserService) Gets(ctx context.Context, directoryID string, opts *SC
 	return
 }
 
-type SCIMUserPageScheme struct {
-	Schemas      []string          `json:"schemas,omitempty"`
-	TotalResults int               `json:"totalResults,omitempty"`
-	StartIndex   int               `json:"startIndex,omitempty"`
-	ItemsPerPage int               `json:"itemsPerPage,omitempty"`
-	Resources    []*SCIMUserScheme `json:"Resources,omitempty"`
-}
-
 // Get a user from a directory by userId.
 // Atlassian Docs: https://developer.atlassian.com/cloud/admin/user-provisioning/rest/api-group-users/#api-scim-directory-directoryid-users-userid-get
 // Library Docs: https://docs.go-atlassian.io/atlassian-admin-cloud/scim/users#get-a-user-by-id
 func (s *SCIMUserService) Get(ctx context.Context, directoryID, userID string, attributes, excludedAttributes []string) (
-	result *SCIMUserScheme, response *ResponseScheme, err error) {
+	result *model.SCIMUserScheme, response *ResponseScheme, err error) {
 
 	if len(directoryID) == 0 {
-		return nil, nil, notDirectoryError
+		return nil, nil, model.ErrNoAdminDirectoryIDError
 	}
 
 	if len(userID) == 0 {
-		return nil, nil, notUserError
+		return nil, nil, model.ErrNoAdminUserIDError
 	}
 
 	params := url.Values{}
@@ -241,11 +163,11 @@ func (s *SCIMUserService) Get(ctx context.Context, directoryID, userID string, a
 func (s *SCIMUserService) Deactivate(ctx context.Context, directoryID, userID string) (response *ResponseScheme, err error) {
 
 	if len(directoryID) == 0 {
-		return nil, notDirectoryError
+		return nil, model.ErrNoAdminDirectoryIDError
 	}
 
 	if len(userID) == 0 {
-		return nil, notUserError
+		return nil, model.ErrNoAdminUserIDError
 	}
 
 	var endpoint = fmt.Sprintf("/scim/directory/%v/Users/%v", directoryID, userID)
@@ -267,15 +189,15 @@ func (s *SCIMUserService) Deactivate(ctx context.Context, directoryID, userID st
 // Refer to GET /ServiceProviderConfig for details on the supported operations.
 // Atlassian Docs: https://developer.atlassian.com/cloud/admin/user-provisioning/rest/api-group-users/#api-scim-directory-directoryid-users-userid-patch
 // Library Docs: https://docs.go-atlassian.io/atlassian-admin-cloud/scim/users#update-user-by-id-patch
-func (s *SCIMUserService) Path(ctx context.Context, directoryID, userID string, payload *SCIMUserToPathScheme, attributes,
-	excludedAttributes []string) (result *SCIMUserScheme, response *ResponseScheme, err error) {
+func (s *SCIMUserService) Path(ctx context.Context, directoryID, userID string, payload *model.SCIMUserToPathScheme, attributes,
+	excludedAttributes []string) (result *model.SCIMUserScheme, response *ResponseScheme, err error) {
 
 	if len(directoryID) == 0 {
 		return nil, nil, fmt.Errorf("error!, please provide a valid directoryID value")
 	}
 
 	if len(userID) == 0 {
-		return nil, nil, notUserError
+		return nil, nil, model.ErrNoAdminUserIDError
 	}
 
 	params := url.Values{}
@@ -316,130 +238,20 @@ func (s *SCIMUserService) Path(ctx context.Context, directoryID, userID string,
 	return
 }
 
-type SCIMUserToPathScheme struct {
-	Schemas    []string                         `json:"schemas,omitempty"`
-	Operations []*SCIMUserToPathOperationScheme `json:"operations,omitempty"`
-}
-
-func (s *SCIMUserToPathScheme) AddStringOperation(operation, path, value string) (err error) {
-
-	if len(operation) == 0 {
-		return fmt.Errorf("error!, please provide a valid operation value, you can check the availables values calling the user schemas")
-	}
-
-	if len(path) == 0 {
-		return fmt.Errorf("error!, please provide a valid path value")
-	}
-
-	if len(value) == 0 {
-		return fmt.Errorf("error!, please provide a valid value value")
-	}
-
-	s.Operations = append(s.Operations, &SCIMUserToPathOperationScheme{
-		Op:    operation,
-		Path:  path,
-		Value: value,
-	})
-
-	return
-}
-
-func (s *SCIMUserToPathScheme) AddBoolOperation(operation, path string, value bool) (err error) {
-
-	if len(operation) == 0 {
-		return fmt.Errorf("error!, please provide a valid operation value, you can check the availables values calling the user schemas")
-	}
-
-	if len(path) == 0 {
-		return fmt.Errorf("error!, please provide a valid path value")
-	}
-
-	s.Operations = append(s.Operations, &SCIMUserToPathOperationScheme{
-		Op:    operation,
-		Path:  path,
-		Value: value,
-	})
-
-	return
-}
-
-func (s *SCIMUserToPathScheme) AddComplexOperation(operation, path string, values []*SCIMUserComplexOperationScheme) (err error) {
-
-	if len(operation) == 0 {
-		return fmt.Errorf("error!, please provide a valid operation value, you can check the availables values calling the user schemas")
-	}
-
-	if len(path) == 0 {
-		return fmt.Errorf("error!, please provide a valid path value")
-	}
-
-	if values == nil {
-		return fmt.Errorf("error!, please provide a valid SCIMUserComplexOperationScheme slice pointer")
-	}
-
-	if len(values) == 0 {
-		return fmt.Errorf("error!, the values variable must contains SCIMUserComplexOperationScheme nodes")
-	}
-
-	s.Operations = append(s.Operations, &SCIMUserToPathOperationScheme{
-		Op:    operation,
-		Path:  path,
-		Value: values,
-	})
-
-	return
-}
-
-type SCIMUserComplexOperationScheme struct {
-	Value     string `json:"value,omitempty"`
-	ValueType string `json:"type,omitempty"` // Available values (work, home, other)
-	Primary   bool   `json:"primary,omitempty"`
-}
-
-type SCIMUserToPathValueScheme struct {
-	Array               bool   `json:"array,omitempty"`
-	Null                bool   `json:"null,omitempty"`
-	ValueNode           bool   `json:"valueNode,omitempty"`
-	ContainerNode       bool   `json:"containerNode,omitempty"`
-	MissingNode         bool   `json:"missingNode,omitempty"`
-	Object              bool   `json:"object,omitempty"`
-	NodeType            string `json:"nodeType,omitempty"`
-	Pojo                bool   `json:"pojo,omitempty"`
-	Number              bool   `json:"number,omitempty"`
-	IntegralNumber      bool   `json:"integralNumber,omitempty"`
-	FloatingPointNumber bool   `json:"floatingPointNumber,omitempty"`
-	Short               bool   `json:"short,omitempty"`
-	Int                 bool   `json:"int,omitempty"`
-	Long                bool   `json:"long,omitempty"`
-	Double              bool   `json:"double,omitempty"`
-	BigDecimal          bool   `json:"bigDecimal,omitempty"`
-	BigInteger          bool   `json:"bigInteger,omitempty"`
-	Textual             bool   `json:"textual,omitempty"`
-	Boolean             bool   `json:"boolean,omitempty"`
-	Binary              bool   `json:"binary,omitempty"`
-	Float               bool   `json:"float,omitempty"`
-}
-
-type SCIMUserToPathOperationScheme struct {
-	Op    string      `json:"op,omitempty"`
-	Path  string      `json:"path,omitempty"`
-	Value interface{} `json:"value,omitempty"`
-}
-
 // Update updates a user's information in a directory by userId via user attributes.
 // User information is replaced attribute-by-attribute, with the exception of immutable and read-only attributes.
 // Existing values of unspecified attributes are cleaned.
 // Atlassian Docs: https://developer.atlassian.com/cloud/admin/user-provisioning/rest/api-group-users/#api-scim-directory-directoryid-users-userid-put
 // Library Docs: https://docs.go-atlassian.io/atlassian-admin-cloud/scim/users#update-user-via-user-attributes
-func (s *SCIMUserService) Update(ctx context.Context, directoryID, userID string, payload *SCIMUserScheme, attributes,
-	excludedAttributes []string) (result *SCIMUserScheme, response *ResponseScheme, err error) {
+func (s *SCIMUserService) Update(ctx context.Context, directoryID, userID string, payload *model.SCIMUserScheme, attributes,
+	excludedAttributes []string) (result *model.SCIMUserScheme, response *ResponseScheme, err error) {
 
 	if len(directoryID) == 0 {
-		return nil, nil, notDirectoryError
+		return nil, nil, model.ErrNoAdminDirectoryIDError
 	}
 
 	if len(userID) == 0 {
-		return nil, nil, notUserError
+		return nil, nil, model.ErrNoAdminUserIDError
 	}
 
 	params := url.Values{}
@@ -478,7 +290,3 @@ func (s *SCIMUserService) Update(ctx context.Context, directoryID, userID string
 
 	return
 }
-
-var (
-	notUserError = fmt.Errorf("error!, please provide a valid userID value")
-)
diff --git a/admin/user.go b/admin/user.go
index 3eecc55..cd37f8b 100644
--- a/admin/user.go
+++ b/admin/user.go
@@ -3,6 +3,7 @@ package admin
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"net/http"
 	"net/url"
 	"strings"
@@ -16,11 +17,11 @@ type UserService struct {
 // Permissions returns the set of permissions you have for managing the specified Atlassian account, this func needs the following parameters:
 // Atlassian Docs: https://developer.atlassian.com/cloud/admin/user-management/rest/api-group-users/#api-users-account-id-manage-get
 // Library Example: https://docs.go-atlassian.io/atlassian-admin-cloud/user#get-user-management-permissions
-func (u *UserService) Permissions(ctx context.Context, accountID string, privileges []string) (result *UserPermissionScheme,
+func (u *UserService) Permissions(ctx context.Context, accountID string, privileges []string) (result *model.AdminUserPermissionScheme,
 	response *ResponseScheme, err error) {
 
 	if len(accountID) == 0 {
-		return nil, nil, notAccountError
+		return nil, nil, model.ErrNoAdminAccountIDError
 	}
 
 	params := url.Values{}
@@ -53,10 +54,10 @@ func (u *UserService) Permissions(ctx context.Context, accountID string, privile
 // Get returns information about a single Atlassian account by ID, this func needs the following parameters:
 // Atlassian Docs: https://developer.atlassian.com/cloud/admin/user-management/rest/api-group-users/#api-users-account-id-manage-profile-get
 // Library Example: https://docs.go-atlassian.io/atlassian-admin-cloud/user#get-profile
-func (u *UserService) Get(ctx context.Context, accountID string) (result *UserScheme, response *ResponseScheme, err error) {
+func (u *UserService) Get(ctx context.Context, accountID string) (result *model.AdminUserScheme, response *ResponseScheme, err error) {
 
 	if len(accountID) == 0 {
-		return nil, nil, notAccountError
+		return nil, nil, model.ErrNoAdminAccountIDError
 	}
 
 	var endpoint = fmt.Sprintf("/users/%v/manage/profile", accountID)
@@ -76,155 +77,14 @@ func (u *UserService) Get(ctx context.Context, accountID string) (result *UserSc
 	return
 }
 
-type UserScheme struct {
-	Account struct {
-		AccountID       string `json:"account_id"`
-		Name            string `json:"name"`
-		Nickname        string `json:"nickname"`
-		Zoneinfo        string `json:"zoneinfo"`
-		Locale          string `json:"locale"`
-		Email           string `json:"email"`
-		Picture         string `json:"picture"`
-		ExtendedProfile struct {
-			JobTitle string `json:"job_title"`
-			TeamType string `json:"team_type"`
-		} `json:"extended_profile"`
-		AccountType     string `json:"account_type"`
-		AccountStatus   string `json:"account_status"`
-		EmailVerified   bool   `json:"email_verified"`
-		PrivacySettings struct {
-			Name                        string `json:"name"`
-			Nickname                    string `json:"nickname"`
-			Picture                     string `json:"picture"`
-			ExtendedProfileJobTitle     string `json:"extended_profile.job_title"`
-			ExtendedProfileDepartment   string `json:"extended_profile.department"`
-			ExtendedProfileOrganization string `json:"extended_profile.organization"`
-			ExtendedProfileLocation     string `json:"extended_profile.location"`
-			ZoneInfo                    string `json:"zoneinfo"`
-			Email                       string `json:"email"`
-			ExtendedProfilePhoneNumber  string `json:"extended_profile.phone_number"`
-			ExtendedProfileTeamType     string `json:"extended_profile.team_type"`
-		} `json:"privacy_settings"`
-	} `json:"account"`
-}
-
-type UserPermissionScheme struct {
-	EmailSet struct {
-		Allowed bool `json:"allowed"`
-		Reason  struct {
-			Key string `json:"key"`
-		} `json:"reason"`
-	} `json:"email.set"`
-	LifecycleEnablement struct {
-		Allowed bool `json:"allowed"`
-		Reason  struct {
-			Key string `json:"key"`
-		} `json:"reason"`
-	} `json:"lifecycle.enablement"`
-	Profile struct {
-		Name struct {
-			Allowed bool `json:"allowed"`
-			Reason  struct {
-				Key string `json:"key"`
-			} `json:"reason"`
-		} `json:"name"`
-		Nickname struct {
-			Allowed bool `json:"allowed"`
-		} `json:"nickname"`
-		Zoneinfo struct {
-			Allowed bool `json:"allowed"`
-		} `json:"zoneinfo"`
-		Locale struct {
-			Allowed bool `json:"allowed"`
-		} `json:"locale"`
-		ExtendedProfilePhoneNumber struct {
-			Allowed bool `json:"allowed"`
-		} `json:"extended_profile.phone_number"`
-		ExtendedProfileJobTitle struct {
-			Allowed bool `json:"allowed"`
-		} `json:"extended_profile.job_title"`
-		ExtendedProfileOrganization struct {
-			Allowed bool `json:"allowed"`
-		} `json:"extended_profile.organization"`
-		ExtendedProfileDepartment struct {
-			Allowed bool `json:"allowed"`
-		} `json:"extended_profile.department"`
-		ExtendedProfileLocation struct {
-			Allowed bool `json:"allowed"`
-		} `json:"extended_profile.location"`
-		ExtendedProfileTeamType struct {
-			Allowed bool `json:"allowed"`
-		} `json:"extended_profile.team_type"`
-	} `json:"profile"`
-	ProfileWrite struct {
-		Name struct {
-			Allowed bool `json:"allowed"`
-			Reason  struct {
-				Key string `json:"key"`
-			} `json:"reason"`
-		} `json:"name"`
-		Nickname struct {
-			Allowed bool `json:"allowed"`
-		} `json:"nickname"`
-		Zoneinfo struct {
-			Allowed bool `json:"allowed"`
-		} `json:"zoneinfo"`
-		Locale struct {
-			Allowed bool `json:"allowed"`
-		} `json:"locale"`
-		ExtendedProfilePhoneNumber struct {
-			Allowed bool `json:"allowed"`
-		} `json:"extended_profile.phone_number"`
-		ExtendedProfileJobTitle struct {
-			Allowed bool `json:"allowed"`
-		} `json:"extended_profile.job_title"`
-		ExtendedProfileOrganization struct {
-			Allowed bool `json:"allowed"`
-		} `json:"extended_profile.organization"`
-		ExtendedProfileDepartment struct {
-			Allowed bool `json:"allowed"`
-		} `json:"extended_profile.department"`
-		ExtendedProfileLocation struct {
-			Allowed bool `json:"allowed"`
-		} `json:"extended_profile.location"`
-		ExtendedProfileTeamType struct {
-			Allowed bool `json:"allowed"`
-		} `json:"extended_profile.team_type"`
-	} `json:"profile.write"`
-	ProfileRead struct {
-		Allowed bool `json:"allowed"`
-	} `json:"profile.read"`
-	LinkedAccountsRead struct {
-		Allowed bool `json:"allowed"`
-	} `json:"linkedAccounts.read"`
-	APITokenRead struct {
-		Allowed bool `json:"allowed"`
-	} `json:"apiToken.read"`
-	APITokenDelete struct {
-		Allowed bool `json:"allowed"`
-	} `json:"apiToken.delete"`
-	Avatar struct {
-		Allowed bool `json:"allowed"`
-	} `json:"avatar"`
-	PrivacySet struct {
-		Allowed bool `json:"allowed"`
-		Reason  struct {
-			Key string `json:"key"`
-		} `json:"reason"`
-	} `json:"privacy.set"`
-	SessionRead struct {
-		Allowed bool `json:"allowed"`
-	} `json:"session.read"`
-}
-
 // Update updates fields in a user account. The profile.write privilege details which fields you can change
 // Atlassian Docs: https://developer.atlassian.com/cloud/admin/user-management/rest/api-group-users/#api-users-account-id-manage-profile-patch
 // Library Example: https://docs.go-atlassian.io/atlassian-admin-cloud/user#update-profile
 func (u *UserService) Update(ctx context.Context, accountID string, payload map[string]interface{}) (
-	result *UserScheme, response *ResponseScheme, err error) {
+	result *model.AdminUserScheme, response *ResponseScheme, err error) {
 
 	if len(accountID) == 0 {
-		return nil, nil, notAccountError
+		return nil, nil, model.ErrNoAdminAccountIDError
 	}
 
 	payloadAsReader, err := transformStructToReader(payload)
@@ -263,7 +123,7 @@ func (u *UserService) Update(ctx context.Context, accountID string, payload map[
 func (u *UserService) Disable(ctx context.Context, accountID, message string) (response *ResponseScheme, err error) {
 
 	if len(accountID) == 0 {
-		return nil, notAccountError
+		return nil, model.ErrNoAdminAccountIDError
 	}
 
 	var (
@@ -313,7 +173,7 @@ func (u *UserService) Disable(ctx context.Context, accountID, message string) (r
 func (u *UserService) Enable(ctx context.Context, accountID string) (response *ResponseScheme, err error) {
 
 	if len(accountID) == 0 {
-		return nil, notAccountError
+		return nil, model.ErrNoAdminAccountIDError
 	}
 
 	var endpoint = fmt.Sprintf("/users/%v/manage/lifecycle/enable", accountID)
@@ -330,7 +190,3 @@ func (u *UserService) Enable(ctx context.Context, accountID string) (response *R
 
 	return
 }
-
-var (
-	notAccountError = fmt.Errorf("error!, please provide a valid accountID value")
-)
diff --git a/admin/userToken.go b/admin/userToken.go
index 4b157e0..1d7615b 100644
--- a/admin/userToken.go
+++ b/admin/userToken.go
@@ -3,8 +3,8 @@ package admin
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"net/http"
-	"time"
 )
 
 type UserTokenService struct{ client *Client }
@@ -12,11 +12,11 @@ type UserTokenService struct{ client *Client }
 // Gets the API tokens owned by the specified user, this func needs the following parameters:
 // Atlassian Docs: https://developer.atlassian.com/cloud/admin/user-management/rest/api-group-users/#api-users-accountid-manage-api-tokens-get
 // Library Docs: https://docs.go-atlassian.io/atlassian-admin-cloud/user/token#get-api-tokens
-func (u *UserTokenService) Gets(ctx context.Context, accountID string) (result *UserTokensScheme,
+func (u *UserTokenService) Gets(ctx context.Context, accountID string) (result *model.UserTokensScheme,
 	response *ResponseScheme, err error) {
 
 	if len(accountID) == 0 {
-		return nil, nil, notAccountError
+		return nil, nil, model.ErrNoAdminAccountIDError
 	}
 
 	var endpoint = fmt.Sprintf("/users/%v/manage/api-tokens", accountID)
@@ -36,24 +36,17 @@ func (u *UserTokenService) Gets(ctx context.Context, accountID string) (result *
 	return
 }
 
-type UserTokensScheme []struct {
-	ID         string    `json:"id,omitempty"`
-	Label      string    `json:"label,omitempty"`
-	CreatedAt  time.Time `json:"createdAt,omitempty"`
-	LastAccess time.Time `json:"lastAccess,omitempty"`
-}
-
 // Delete deletes a specified API token by ID, this func needs the following parameters:
 // Atlassian Docs: https://developer.atlassian.com/cloud/admin/user-management/rest/api-group-users/#api-users-accountid-manage-api-tokens-tokenid-delete
 // Library Docs: https://docs.go-atlassian.io/atlassian-admin-cloud/user/token#delete-api-token
 func (u *UserTokenService) Delete(ctx context.Context, accountID, tokenID string) (response *ResponseScheme, err error) {
 
 	if len(accountID) == 0 {
-		return nil, notAccountError
+		return nil, model.ErrNoAdminAccountIDError
 	}
 
 	if len(tokenID) == 0 {
-		return nil, notTokenError
+		return nil, model.ErrNoAdminUserTokenError
 	}
 
 	var endpoint = fmt.Sprintf("/users/%v/manage/api-tokens/%v", accountID, tokenID)
@@ -72,7 +65,3 @@ func (u *UserTokenService) Delete(ctx context.Context, accountID, tokenID string
 
 	return
 }
-
-var (
-	notTokenError = fmt.Errorf("error!, please provide a valid tokenID value")
-)
diff --git a/pkg/infra/models/admin_organization.go b/pkg/infra/models/admin_organization.go
new file mode 100644
index 0000000..5b74ed6
--- /dev/null
+++ b/pkg/infra/models/admin_organization.go
@@ -0,0 +1,181 @@
+package models
+
+import "time"
+
+type AdminOrganizationPageScheme struct {
+	Data  []*OrganizationModelScheme `json:"data,omitempty"`
+	Links *LinkPageModelScheme       `json:"links,omitempty"`
+}
+
+type LinkPageModelScheme struct {
+	Self string `json:"self,omitempty"`
+	Prev string `json:"prev,omitempty"`
+	Next string `json:"next,omitempty"`
+}
+
+type OrganizationModelScheme struct {
+	ID            string                          `json:"id,omitempty"`
+	Type          string                          `json:"type,omitempty"`
+	Attributes    *OrganizationModelAttribute     `json:"attributes,omitempty"`
+	Relationships *OrganizationModelRelationships `json:"relationships,omitempty"`
+	Links         *LinkSelfModelScheme            `json:"links,omitempty"`
+}
+
+type OrganizationModelAttribute struct {
+	Name string `json:"name,omitempty"`
+}
+
+type OrganizationModelRelationships struct {
+	Domains *OrganizationModelSchemes `json:"domains,omitempty"`
+	Users   *OrganizationModelSchemes `json:"users,omitempty"`
+}
+
+type OrganizationModelSchemes struct {
+	Links struct {
+		Related string `json:"related,omitempty"`
+	} `json:"links,omitempty"`
+}
+
+type LinkSelfModelScheme struct {
+	Self string `json:"self,omitempty"`
+}
+
+type AdminOrganizationScheme struct {
+	Data *OrganizationModelScheme `json:"data,omitempty"`
+}
+
+type OrganizationUserPageScheme struct {
+	Data  []*AdminOrganizationUserScheme `json:"data,omitempty"`
+	Links *LinkPageModelScheme           `json:"links,omitempty"`
+	Meta  struct {
+		Total int `json:"total,omitempty"`
+	} `json:"meta,omitempty"`
+}
+
+type AdminOrganizationUserScheme struct {
+	AccountID      string                           `json:"account_id,omitempty"`
+	AccountType    string                           `json:"account_type,omitempty"`
+	AccountStatus  string                           `json:"account_status,omitempty"`
+	Name           string                           `json:"name,omitempty"`
+	Picture        string                           `json:"picture,omitempty"`
+	Email          string                           `json:"email,omitempty"`
+	AccessBillable bool                             `json:"access_billable,omitempty"`
+	LastActive     string                           `json:"last_active,omitempty"`
+	ProductAccess  []*OrganizationUserProductScheme `json:"product_access,omitempty"`
+	Links          *LinkSelfModelScheme             `json:"links,omitempty"`
+}
+
+type OrganizationUserProductScheme struct {
+	Key        string `json:"key,omitempty"`
+	Name       string `json:"name,omitempty"`
+	URL        string `json:"url,omitempty"`
+	LastActive string `json:"last_active,omitempty"`
+}
+
+type OrganizationDomainPageScheme struct {
+	Data  []*OrganizationDomainModelScheme `json:"data,omitempty"`
+	Links *LinkPageModelScheme             `json:"links,omitempty"`
+}
+
+type OrganizationDomainModelScheme struct {
+	ID         string `json:"id,omitempty"`
+	Type       string `json:"type,omitempty"`
+	Attributes struct {
+		Name  string `json:"name,omitempty"`
+		Claim struct {
+			Type   string `json:"type,omitempty"`
+			Status string `json:"status,omitempty"`
+		} `json:"claim,omitempty"`
+	} `json:"attributes,omitempty"`
+	Links *LinkSelfModelScheme `json:"links,omitempty"`
+}
+
+type OrganizationDomainScheme struct {
+	Data *OrganizationDomainDataScheme `json:"data"`
+}
+
+type OrganizationDomainDataScheme struct {
+	ID         string `json:"id"`
+	Type       string `json:"type"`
+	Attributes struct {
+		Name  string `json:"name"`
+		Claim struct {
+			Type   string `json:"type"`
+			Status string `json:"status"`
+		} `json:"claim"`
+	} `json:"attributes"`
+	Links struct {
+		Self string `json:"self"`
+	} `json:"links"`
+}
+
+type OrganizationEventOptScheme struct {
+	Q      string    //Single query term for searching events.
+	From   time.Time //The earliest date and time of the event represented as a UNIX epoch time.
+	To     time.Time //The latest date and time of the event represented as a UNIX epoch time.
+	Action string    //A query filter that returns events of a specific action type.
+}
+
+type OrganizationEventPageScheme struct {
+	Data  []*OrganizationEventModelScheme `json:"data,omitempty"`
+	Links *LinkPageModelScheme            `json:"links,omitempty"`
+	Meta  struct {
+		Next     string `json:"next,omitempty"`
+		PageSize int    `json:"page_size,omitempty"`
+	} `json:"meta,omitempty"`
+}
+
+type OrganizationEventModelScheme struct {
+	ID         string                                  `json:"id,omitempty"`
+	Type       string                                  `json:"type,omitempty"`
+	Attributes *OrganizationEventModelAttributesScheme `json:"attributes,omitempty"`
+	Links      *LinkSelfModelScheme                    `json:"links,omitempty"`
+}
+
+type OrganizationEventModelAttributesScheme struct {
+	Time      string                          `json:"time,omitempty"`
+	Action    string                          `json:"action,omitempty"`
+	Actor     *OrganizationEventActorModel    `json:"actor,omitempty"`
+	Context   []*OrganizationEventObjectModel `json:"context,omitempty"`
+	Container []*OrganizationEventObjectModel `json:"container,omitempty"`
+	Location  *OrganizationEventLocationModel `json:"location,omitempty"`
+}
+
+type OrganizationEventActorModel struct {
+	ID    string               `json:"id,omitempty"`
+	Name  string               `json:"name,omitempty"`
+	Links *LinkSelfModelScheme `json:"links,omitempty"`
+}
+
+type OrganizationEventObjectModel struct {
+	ID    string `json:"id,omitempty"`
+	Type  string `json:"type,omitempty"`
+	Links struct {
+		Self string `json:"self,omitempty"`
+		Alt  string `json:"alt,omitempty"`
+	} `json:"links,omitempty"`
+}
+
+type OrganizationEventLocationModel struct {
+	IP  string `json:"ip,omitempty"`
+	Geo string `json:"geo,omitempty"`
+}
+
+type OrganizationEventScheme struct {
+	Data *OrganizationEventModelScheme `json:"data,omitempty"`
+}
+
+type OrganizationEventActionScheme struct {
+	Data []*OrganizationEventActionModelScheme `json:"data,omitempty"`
+}
+
+type OrganizationEventActionModelScheme struct {
+	ID         string                                        `json:"id,omitempty"`
+	Type       string                                        `json:"type,omitempty"`
+	Attributes *OrganizationEventActionModelAttributesScheme `json:"attributes,omitempty"`
+}
+
+type OrganizationEventActionModelAttributesScheme struct {
+	DisplayName      string `json:"displayName,omitempty"`
+	GroupDisplayName string `json:"groupDisplayName,omitempty"`
+}
diff --git a/pkg/infra/models/admin_organization_policy.go b/pkg/infra/models/admin_organization_policy.go
new file mode 100644
index 0000000..d84b167
--- /dev/null
+++ b/pkg/infra/models/admin_organization_policy.go
@@ -0,0 +1,33 @@
+package models
+
+import "time"
+
+type OrganizationPolicyPageScheme struct {
+	Data  []*OrganizationPolicyData `json:"data"`
+	Links *LinkPageModelScheme      `json:"links"`
+	Meta  struct {
+		Next     string `json:"next"`
+		PageSize int    `json:"page_size"`
+	} `json:"meta"`
+}
+
+type OrganizationPolicyScheme struct {
+	Data OrganizationPolicyData `json:"data"`
+}
+type OrganizationPolicyResource struct {
+	ID                string `json:"id,omitempty"`
+	ApplicationStatus string `json:"applicationStatus,omitempty"`
+}
+type OrganizationPolicyAttributes struct {
+	Type      string                        `json:"type,omitempty"`
+	Name      string                        `json:"name,omitempty"`
+	Status    string                        `json:"status,omitempty"`
+	Resources []*OrganizationPolicyResource `json:"resources,omitempty"`
+	CreatedAt time.Time                     `json:"createdAt,omitempty"`
+	UpdatedAt time.Time                     `json:"updatedAt,omitempty"`
+}
+type OrganizationPolicyData struct {
+	ID         string                        `json:"id,omitempty"`
+	Type       string                        `json:"type,omitempty"`
+	Attributes *OrganizationPolicyAttributes `json:"attributes,omitempty"`
+}
diff --git a/pkg/infra/models/admin_scim_group.go b/pkg/infra/models/admin_scim_group.go
new file mode 100644
index 0000000..ded9d4c
--- /dev/null
+++ b/pkg/infra/models/admin_scim_group.go
@@ -0,0 +1,48 @@
+package models
+
+type SCIMGroupPathScheme struct {
+	Schemas    []string                    `json:"schemas,omitempty"`
+	Operations []*SCIMGroupOperationScheme `json:"Operations,omitempty"`
+}
+
+type SCIMGroupOperationScheme struct {
+	Op    string                           `json:"op,omitempty"`
+	Path  string                           `json:"path,omitempty"`
+	Value []*SCIMGroupOperationValueScheme `json:"value,omitempty"`
+}
+
+type SCIMGroupOperationValueScheme struct {
+	Value   string `json:"value,omitempty"`
+	Display string `json:"display,omitempty"`
+}
+
+type ScimGroupPageScheme struct {
+	Schemas      []string           `json:"schemas,omitempty"`
+	TotalResults int                `json:"totalResults,omitempty"`
+	StartIndex   int                `json:"startIndex,omitempty"`
+	ItemsPerPage int                `json:"itemsPerPage,omitempty"`
+	Resources    []*ScimGroupScheme `json:"Resources,omitempty"`
+}
+
+type ScimGroupScheme struct {
+	Schemas     []string                 `json:"schemas,omitempty"`
+	ID          string                   `json:"id,omitempty"`
+	ExternalID  string                   `json:"externalId,omitempty"`
+	DisplayName string                   `json:"displayName,omitempty"`
+	Members     []*ScimGroupMemberScheme `json:"members,omitempty"`
+	Meta        *ScimMetadata            `json:"meta,omitempty"`
+}
+
+type ScimGroupMemberScheme struct {
+	Type    string `json:"type,omitempty"`
+	Value   string `json:"value,omitempty"`
+	Display string `json:"display,omitempty"`
+	Ref     string `json:"$ref,omitempty"`
+}
+
+type ScimMetadata struct {
+	ResourceType string `json:"resourceType,omitempty"`
+	Location     string `json:"location,omitempty"`
+	LastModified string `json:"lastModified,omitempty"`
+	Created      string `json:"created,omitempty"`
+}
diff --git a/pkg/infra/models/admin_scim_scheme.go b/pkg/infra/models/admin_scim_scheme.go
new file mode 100644
index 0000000..30ee42d
--- /dev/null
+++ b/pkg/infra/models/admin_scim_scheme.go
@@ -0,0 +1,93 @@
+package models
+
+import "time"
+
+type SCIMSchemasScheme struct {
+	TotalResults int               `json:"totalResults,omitempty"`
+	ItemsPerPage int               `json:"itemsPerPage,omitempty"`
+	StartIndex   int               `json:"startIndex,omitempty"`
+	Schemas      []string          `json:"schemas,omitempty"`
+	Resources    []*ResourceScheme `json:"Resources,omitempty"`
+}
+
+type ResourceScheme struct {
+	ID          string              `json:"id,omitempty"`
+	Name        string              `json:"name,omitempty"`
+	Description string              `json:"description,omitempty"`
+	Attributes  []*AttributeScheme  `json:"attributes,omitempty"`
+	Meta        *ResourceMetaScheme `json:"meta,omitempty"`
+}
+
+type ResourceMetaScheme struct {
+	ResourceType string `json:"resourceType,omitempty"`
+	Location     string `json:"location,omitempty"`
+}
+
+type AttributeScheme struct {
+	Name          string                `json:"name,omitempty"`
+	Type          string                `json:"type,omitempty"`
+	MultiValued   bool                  `json:"multiValued,omitempty"`
+	Description   string                `json:"description,omitempty"`
+	Required      bool                  `json:"required,omitempty"`
+	CaseExact     bool                  `json:"caseExact,omitempty"`
+	Mutability    string                `json:"mutability,omitempty"`
+	Returned      string                `json:"returned,omitempty"`
+	Uniqueness    string                `json:"uniqueness,omitempty"`
+	SubAttributes []*SubAttributeScheme `json:"subAttributes,omitempty"`
+}
+
+type SubAttributeScheme struct {
+	Name        string `json:"name,omitempty"`
+	Type        string `json:"type,omitempty"`
+	MultiValued bool   `json:"multiValued,omitempty"`
+	Description string `json:"description,omitempty"`
+	Required    bool   `json:"required,omitempty"`
+	CaseExact   bool   `json:"caseExact,omitempty"`
+	Mutability  string `json:"mutability,omitempty"`
+	Returned    string `json:"returned,omitempty"`
+	Uniqueness  string `json:"uniqueness,omitempty"`
+}
+
+type SCIMSchemaScheme struct {
+	ID          string              `json:"id,omitempty"`
+	Name        string              `json:"name,omitempty"`
+	Description string              `json:"description,omitempty"`
+	Attributes  []*AttributeScheme  `json:"attributes,omitempty"`
+	Meta        *ResourceMetaScheme `json:"meta,omitempty"`
+}
+
+type ServiceProviderConfigScheme struct {
+	Schemas []string `json:"schemas"`
+	Patch   struct {
+		Supported bool `json:"supported"`
+	} `json:"patch"`
+	Bulk struct {
+		Supported      bool `json:"supported"`
+		MaxOperations  int  `json:"maxOperations"`
+		MaxPayloadSize int  `json:"maxPayloadSize"`
+	} `json:"bulk"`
+	Filter struct {
+		MaxResults int  `json:"maxResults"`
+		Supported  bool `json:"supported"`
+	} `json:"filter"`
+	ChangePassword struct {
+		Supported bool `json:"supported"`
+	} `json:"changePassword"`
+	Sort struct {
+		Supported bool `json:"supported"`
+	} `json:"sort"`
+	Etag struct {
+		Supported bool `json:"supported"`
+	} `json:"etag"`
+	AuthenticationSchemes []struct {
+		Type        string `json:"type"`
+		Name        string `json:"name"`
+		Description string `json:"description"`
+	} `json:"authenticationSchemes"`
+	Meta struct {
+		Location     string    `json:"location"`
+		ResourceType string    `json:"resourceType"`
+		LastModified time.Time `json:"lastModified"`
+		Created      time.Time `json:"created"`
+	} `json:"meta"`
+}
diff --git a/pkg/infra/models/admin_scim_user.go b/pkg/infra/models/admin_scim_user.go
new file mode 100644
index 0000000..266d3d2
--- /dev/null
+++ b/pkg/infra/models/admin_scim_user.go
@@ -0,0 +1,192 @@
+package models
+
+import "fmt"
+
+type SCIMUserScheme struct {
+	ID                string                        `json:"id"`
+	ExternalID        string                        `json:"externalId"`
+	Meta              *SCIMUserMetaScheme           `json:"meta,omitempty"`
+	Groups            []*SCIMUserGroupScheme        `json:"groups,omitempty"`
+	UserName          string                        `json:"userName,omitempty"`
+	Emails            []*SCIMUserEmailScheme        `json:"emails,omitempty"`
+	Name              *SCIMUserNameScheme           `json:"name,omitempty"`
+	DisplayName       string                        `json:"displayName,omitempty"`
+	NickName          string                        `json:"nickName,omitempty"`
+	Title             string                        `json:"title,omitempty"`
+	PreferredLanguage string                        `json:"preferredLanguage,omitempty"`
+	Department        string                        `json:"department,omitempty"`
+	Organization      string                        `json:"organization,omitempty"`
+	Timezone          string                        `json:"timezone,omitempty"`
+	PhoneNumbers      []*SCIMUserPhoneNumberScheme  `json:"phoneNumbers,omitempty"`
+	Active            bool                          `json:"active,omitempty"`
+	EnterpriseInfo    *SCIMEnterpriseUserInfoScheme `json:"urn:ietf:params:scim:schemas:extension:enterprise:2.1:User,omitempty"`
+	SCIMExtension     *SCIMExtensionScheme          `json:"urn:scim:schemas:extension:atlassian-external:1.1,omitempty"`
+}
+
+type SCIMUserEmailScheme struct {
+	Value   string `json:"value,omitempty"`
+	Type    string `json:"type,omitempty"`
+	Primary bool   `json:"primary,omitempty"`
+}
+
+type SCIMUserNameScheme struct {
+	Formatted       string `json:"formatted,omitempty"`
+	FamilyName      string `json:"familyName,omitempty"`
+	GivenName       string `json:"givenName,omitempty"`
+	MiddleName      string `json:"middleName,omitempty"`
+	HonorificPrefix string `json:"honorificPrefix,omitempty"`
+	HonorificSuffix string `json:"honorificSuffix,omitempty"`
+}
+
+type SCIMUserPhoneNumberScheme struct {
+	Value   string `json:"value,omitempty"`
+	Type    string `json:"type,omitempty"`
+	Primary bool   `json:"primary,omitempty"`
+}
+
+type SCIMUserMetaScheme struct {
+	ResourceType string `json:"resourceType,omitempty"`
+	Location     string `json:"location,omitempty"`
+	LastModified string `json:"lastModified,omitempty"`
+	Created      string `json:"created,omitempty"`
+}
+
+type SCIMUserGroupScheme struct {
+	Type    string `json:"type,omitempty"`
+	Value   string `json:"value,omitempty"`
+	Display string `json:"display,omitempty"`
+	Ref     string `json:"$ref,omitempty"`
+}
+
+type SCIMEnterpriseUserInfoScheme struct {
+	Organization string `json:"organization,omitempty"`
+	Department   string `json:"department,omitempty"`
+}
+
+type SCIMExtensionScheme struct {
+	AtlassianAccountID string `json:"atlassianAccountId,omitempty"`
+}
+
+type SCIMUserGetsOptionsScheme struct {
+	Attributes         []string
+	ExcludedAttributes []string
+	Filter             string
+}
+
+type SCIMUserPageScheme struct {
+	Schemas      []string          `json:"schemas,omitempty"`
+	TotalResults int               `json:"totalResults,omitempty"`
+	StartIndex   int               `json:"startIndex,omitempty"`
+	ItemsPerPage int               `json:"itemsPerPage,omitempty"`
+	Resources    []*SCIMUserScheme `json:"Resources,omitempty"`
+}
+
+type SCIMUserToPathScheme struct {
+	Schemas    []string                         `json:"schemas,omitempty"`
+	Operations []*SCIMUserToPathOperationScheme `json:"operations,omitempty"`
+}
+
+func (s *SCIMUserToPathScheme) AddStringOperation(operation, path, value string) (err error) {
+
+	if len(operation) == 0 {
+		return fmt.Errorf("error!, please provide a valid operation value, you can check the availables values calling the user schemas")
+	}
+
+	if len(path) == 0 {
+		return fmt.Errorf("error!, please provide a valid path value")
+	}
+
+	if len(value) == 0 {
+		return fmt.Errorf("error!, please provide a valid value value")
+	}
+
+	s.Operations = append(s.Operations, &SCIMUserToPathOperationScheme{
+		Op:    operation,
+		Path:  path,
+		Value: value,
+	})
+
+	return
+}
+
+func (s *SCIMUserToPathScheme) AddBoolOperation(operation, path string, value bool) (err error) {
+
+	if len(operation) == 0 {
+		return fmt.Errorf("error!, please provide a valid operation value, you can check the availables values calling the user schemas")
+	}
+
+	if len(path) == 0 {
+		return fmt.Errorf("error!, please provide a valid path value")
+	}
+
+	s.Operations = append(s.Operations, &SCIMUserToPathOperationScheme{
+		Op:    operation,
+		Path:  path,
+		Value: value,
+	})
+
+	return
+}
+
+func (s *SCIMUserToPathScheme) AddComplexOperation(operation, path string, values []*SCIMUserComplexOperationScheme) (err error) {
+
+	if len(operation) == 0 {
+		return fmt.Errorf("error!, please provide a valid operation value, you can check the availables values calling the user schemas")
+	}
+
+	if len(path) == 0 {
+		return fmt.Errorf("error!, please provide a valid path value")
+	}
+
+	if values == nil {
+		return fmt.Errorf("error!, please provide a valid SCIMUserComplexOperationScheme slice pointer")
+	}
+
+	if len(values) == 0 {
+		return fmt.Errorf("error!, the values variable must contains SCIMUserComplexOperationScheme nodes")
+	}
+
+	s.Operations = append(s.Operations, &SCIMUserToPathOperationScheme{
+		Op:    operation,
+		Path:  path,
+		Value: values,
+	})
+
+	return
+}
+
+type SCIMUserComplexOperationScheme struct {
+	Value     string `json:"value,omitempty"`
+	ValueType string `json:"type,omitempty"` // Available values (work, home, other)
+	Primary   bool   `json:"primary,omitempty"`
+}
+
+type SCIMUserToPathValueScheme struct {
+	Array               bool   `json:"array,omitempty"`
+	Null                bool   `json:"null,omitempty"`
+	ValueNode           bool   `json:"valueNode,omitempty"`
+	ContainerNode       bool   `json:"containerNode,omitempty"`
+	MissingNode         bool   `json:"missingNode,omitempty"`
+	Object              bool   `json:"object,omitempty"`
+	NodeType            string `json:"nodeType,omitempty"`
+	Pojo                bool   `json:"pojo,omitempty"`
+	Number              bool   `json:"number,omitempty"`
+	IntegralNumber      bool   `json:"integralNumber,omitempty"`
+	FloatingPointNumber bool   `json:"floatingPointNumber,omitempty"`
+	Short               bool   `json:"short,omitempty"`
+	Int                 bool   `json:"int,omitempty"`
+	Long                bool   `json:"long,omitempty"`
+	Double              bool   `json:"double,omitempty"`
+	BigDecimal          bool   `json:"bigDecimal,omitempty"`
+	BigInteger          bool   `json:"bigInteger,omitempty"`
+	Textual             bool   `json:"textual,omitempty"`
+	Boolean             bool   `json:"boolean,omitempty"`
+	Binary              bool   `json:"binary,omitempty"`
+	Float               bool   `json:"float,omitempty"`
+}
+
+type SCIMUserToPathOperationScheme struct {
+	Op    string      `json:"op,omitempty"`
+	Path  string      `json:"path,omitempty"`
+	Value interface{} `json:"value,omitempty"`
+}
diff --git a/pkg/infra/models/admin_user.go b/pkg/infra/models/admin_user.go
new file mode 100644
index 0000000..df67672
--- /dev/null
+++ b/pkg/infra/models/admin_user.go
@@ -0,0 +1,75 @@
+package models
+
+type AdminUserScheme struct {
+	Account *AdminUserAccountScheme `json:"account,omitempty"`
+}
+
+type AdminUserAccountScheme struct {
+	AccountID       string                          `json:"account_id,omitempty"`
+	Name            string                          `json:"name,omitempty"`
+	Nickname        string                          `json:"nickname,omitempty"`
+	ZoneInfo        string                          `json:"zoneinfo,omitempty"`
+	Locale          string                          `json:"locale,omitempty"`
+	Email           string                          `json:"email,omitempty"`
+	Picture         string                          `json:"picture,omitempty"`
+	AccountType     string                          `json:"account_type,omitempty"`
+	AccountStatus   string                          `json:"account_status,omitempty"`
+	EmailVerified   bool                            `json:"email_verified,omitempty"`
+	ExtendedProfile *AdminUserExtendedProfileScheme `json:"extended_profile"`
+	PrivacySettings *AdminUserPrivacySettingsScheme `json:"privacy_settings"`
+}
+
+type AdminUserExtendedProfileScheme struct {
+	JobTitle string `json:"job_title,omitempty"`
+	TeamType string `json:"team_type,omitempty"`
+}
+
+type AdminUserPrivacySettingsScheme struct {
+	Name                        string `json:"name,omitempty"`
+	Nickname                    string `json:"nickname,omitempty"`
+	Picture                     string `json:"picture,omitempty"`
+	ExtendedProfileJobTitle     string `json:"extended_profile.job_title,omitempty"`
+	ExtendedProfileDepartment   string `json:"extended_profile.department,omitempty"`
+	ExtendedProfileOrganization string `json:"extended_profile.organization,omitempty"`
+	ExtendedProfileLocation     string `json:"extended_profile.location,omitempty"`
+	ZoneInfo                    string `json:"zoneinfo,omitempty"`
+	Email                       string `json:"email,omitempty"`
+	ExtendedProfilePhoneNumber  string `json:"extended_profile.phone_number,omitempty"`
+	ExtendedProfileTeamType     string `json:"extended_profile.team_type,omitempty"`
+}
+
+type AdminUserPermissionGrantScheme struct {
+	Allowed bool                                  `json:"allowed,omitempty"`
+	Reason  *AdminUserPermissionGrantReasonScheme `json:"reason,omitempty"`
+}
+
+type AdminUserPermissionGrantReasonScheme struct {
+	Key string `json:"key,omitempty"`
+}
+
+type AdminUserPermissionScheme struct {
+	EmailSet            *AdminUserPermissionGrantScheme   `json:"email.set,omitempty"`
+	LifecycleEnablement *AdminUserPermissionGrantScheme   `json:"lifecycle.enablement,omitempty"`
+	Profile             *AdminUserPermissionProfileScheme `json:"profile,omitempty"`
+	ProfileWrite        *AdminUserPermissionProfileScheme `json:"profile.write,omitempty"`
+	ProfileRead         *AdminUserPermissionGrantScheme   `json:"profile.read,omitempty"`
+	LinkedAccountsRead  *AdminUserPermissionGrantScheme   `json:"linkedAccounts.read,omitempty"`
+	APITokenRead        *AdminUserPermissionGrantScheme   `json:"apiToken.read,omitempty"`
+	APITokenDelete      *AdminUserPermissionGrantScheme   `json:"apiToken.delete,omitempty"`
+	Avatar              *AdminUserPermissionGrantScheme   `json:"avatar,omitempty"`
+	PrivacySet          *AdminUserPermissionGrantScheme   `json:"privacy.set,omitempty"`
+	SessionRead         *AdminUserPermissionGrantScheme   `json:"session.read,omitempty"`
+}
+
+type AdminUserPermissionProfileScheme struct {
+	Name                        *AdminUserPermissionGrantScheme `json:"name,omitempty"`
+	Nickname                    *AdminUserPermissionGrantScheme `json:"nickname,omitempty"`
+	Zoneinfo                    *AdminUserPermissionGrantScheme `json:"zoneinfo,omitempty"`
+	Locale                      *AdminUserPermissionGrantScheme `json:"locale,omitempty"`
+	ExtendedProfilePhoneNumber  *AdminUserPermissionGrantScheme `json:"extended_profile.phone_number,omitempty"`
+	ExtendedProfileJobTitle     *AdminUserPermissionGrantScheme `json:"extended_profile.job_title,omitempty"`
+	ExtendedProfileOrganization *AdminUserPermissionGrantScheme `json:"extended_profile.organization,omitempty"`
+	ExtendedProfileDepartment   *AdminUserPermissionGrantScheme `json:"extended_profile.department,omitempty"`
+	ExtendedProfileLocation     *AdminUserPermissionGrantScheme `json:"extended_profile.location,omitempty"`
+	ExtendedProfileTeamType     *AdminUserPermissionGrantScheme `json:"extended_profile.team_type,omitempty"`
+}
diff --git a/pkg/infra/models/admin_user_token.go b/pkg/infra/models/admin_user_token.go
new file mode 100644
index 0000000..3e52342
--- /dev/null
+++ b/pkg/infra/models/admin_user_token.go
@@ -0,0 +1,10 @@
+package models
+
+import "time"
+
+type UserTokensScheme []struct {
+	ID         string    `json:"id,omitempty"`
+	Label      string    `json:"label,omitempty"`
+	CreatedAt  time.Time `json:"createdAt,omitempty"`
+	LastAccess time.Time `json:"lastAccess,omitempty"`
+}
diff --git a/pkg/infra/models/errors.go b/pkg/infra/models/errors.go
index f1404db..775bc25 100644
--- a/pkg/infra/models/errors.go
+++ b/pkg/infra/models/errors.go
@@ -5,6 +5,17 @@ import (
 )
 
 var (
+	ErrNoAdminOrganizationError = errors.New("admin: no organization id set")
+	ErrNoAdminDomainIDError     = errors.New("admin: no domain id set")
+	ErrNoEventIDError           = errors.New("admin: no event id set")
+	ErrNoAdminPolicyError       = errors.New("admin: no organization policy id set")
+	ErrNoAdminDirectoryIDError  = errors.New("admin: no directory id set")
+	ErrNoAdminGroupIDError      = errors.New("admin: no group id set")
+	ErrNoAdminGroupNameError    = errors.New("admin: no group name set")
+	ErrNoAdminUserIDError       = errors.New("admin: no user id set")
+	ErrNoAdminAccountIDError    = errors.New("admin: no account id set")
+	ErrNoAdminUserTokenError    = errors.New("admin: no user token id set")
+
 	ErrNoCustomerMailError        = errors.New("sm: no customer mail set")
 	ErrNoCustomerDisplayNameError = errors.New("sm: no customer display name set")
 	ErrNoKBQueryError             = errors.New("sm: no knowledge base query set")


Test patch:
diff --git a/admin/admin_test.go b/admin/admin_test.go
index b5104f1..0c8925a 100644
--- a/admin/admin_test.go
+++ b/admin/admin_test.go
@@ -3,6 +3,7 @@ package admin
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"github.com/stretchr/testify/assert"
 	"io"
 	"io/ioutil"
@@ -258,16 +259,16 @@ func Test_transformStructToReader(t *testing.T) {
 		{
 			name: "TransformStructToReaderWhenTheParametersAreCorrect",
 			args: args{
-				structure: &SCIMUserScheme{
+				structure: &model.SCIMUserScheme{
 					UserName: "Example Username 3",
-					Emails: []*SCIMUserEmailScheme{
+					Emails: []*model.SCIMUserEmailScheme{
 						{
 							Value:   "example-2@go-atlassian.io",
 							Type:    "work",
 							Primary: true,
 						},
 					},
-					Name: &SCIMUserNameScheme{
+					Name: &model.SCIMUserNameScheme{
 						Formatted:       "Example Full Name with Last Name",
 						FamilyName:      "Example Family Name",
 						GivenName:       "Example Name",
diff --git a/admin/organizationPolicy_test.go b/admin/organizationPolicy_test.go
index 5d07fb6..05a2feb 100644
--- a/admin/organizationPolicy_test.go
+++ b/admin/organizationPolicy_test.go
@@ -3,6 +3,7 @@ package admin
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"github.com/stretchr/testify/assert"
 	"net/http"
 	"net/url"
@@ -414,7 +415,7 @@ func TestOrganizationPolicyService_Create(t *testing.T) {
 	testCases := []struct {
 		name               string
 		organizationID     string
-		payload            *OrganizationPolicyData
+		payload            *model.OrganizationPolicyData
 		mockFile           string
 		wantHTTPMethod     string
 		endpoint           string
@@ -426,9 +427,9 @@ func TestOrganizationPolicyService_Create(t *testing.T) {
 			name:           "CreateOrganizationPolicyWhenTheParametersAreCorrect",
 			mockFile:       "./mocks/get-organization-policy.json",
 			organizationID: "d094d850-d57e-483a-bd03-ca8855919267",
-			payload: &OrganizationPolicyData{
+			payload: &model.OrganizationPolicyData{
 				Type: "policy",
-				Attributes: &OrganizationPolicyAttributes{
+				Attributes: &model.OrganizationPolicyAttributes{
 					Type:   "data-residency", //ip-allowlist
 					Name:   "SCIMUserNameScheme of this Policy",
 					Status: "enabled", //disabled
@@ -445,9 +446,9 @@ func TestOrganizationPolicyService_Create(t *testing.T) {
 			name:           "CreateOrganizationPolicyWhenTheOrganizationIDIsNotSet",
 			mockFile:       "./mocks/get-organization-policy.json",
 			organizationID: "",
-			payload: &OrganizationPolicyData{
+			payload: &model.OrganizationPolicyData{
 				Type: "policy",
-				Attributes: &OrganizationPolicyAttributes{
+				Attributes: &model.OrganizationPolicyAttributes{
 					Type:   "data-residency", //ip-allowlist
 					Name:   "SCIMUserNameScheme of this Policy",
 					Status: "enabled", //disabled
@@ -476,9 +477,9 @@ func TestOrganizationPolicyService_Create(t *testing.T) {
 			name:           "CreateOrganizationPolicyWhenTheRequestMethodIsIncorrect",
 			mockFile:       "./mocks/get-organization-policy.json",
 			organizationID: "d094d850-d57e-483a-bd03-ca8855919267",
-			payload: &OrganizationPolicyData{
+			payload: &model.OrganizationPolicyData{
 				Type: "policy",
-				Attributes: &OrganizationPolicyAttributes{
+				Attributes: &model.OrganizationPolicyAttributes{
 					Type:   "data-residency", //ip-allowlist
 					Name:   "SCIMUserNameScheme of this Policy",
 					Status: "enabled", //disabled
@@ -495,9 +496,9 @@ func TestOrganizationPolicyService_Create(t *testing.T) {
 			name:           "CreateOrganizationPolicyWhenTheStatusCodeIsIncorrect",
 			mockFile:       "./mocks/get-organization-policy.json",
 			organizationID: "d094d850-d57e-483a-bd03-ca8855919267",
-			payload: &OrganizationPolicyData{
+			payload: &model.OrganizationPolicyData{
 				Type: "policy",
-				Attributes: &OrganizationPolicyAttributes{
+				Attributes: &model.OrganizationPolicyAttributes{
 					Type:   "data-residency", //ip-allowlist
 					Name:   "SCIMUserNameScheme of this Policy",
 					Status: "enabled", //disabled
@@ -514,9 +515,9 @@ func TestOrganizationPolicyService_Create(t *testing.T) {
 			name:           "CreateOrganizationPolicyWhenTheContextIsNil",
 			mockFile:       "./mocks/get-organization-policy.json",
 			organizationID: "d094d850-d57e-483a-bd03-ca8855919267",
-			payload: &OrganizationPolicyData{
+			payload: &model.OrganizationPolicyData{
 				Type: "policy",
-				Attributes: &OrganizationPolicyAttributes{
+				Attributes: &model.OrganizationPolicyAttributes{
 					Type:   "data-residency", //ip-allowlist
 					Name:   "SCIMUserNameScheme of this Policy",
 					Status: "enabled", //disabled
@@ -533,9 +534,9 @@ func TestOrganizationPolicyService_Create(t *testing.T) {
 			name:           "CreateOrganizationPolicyWhenTheEndpointIsEmpty",
 			mockFile:       "./mocks/get-organization-policy.json",
 			organizationID: "d094d850-d57e-483a-bd03-ca8855919267",
-			payload: &OrganizationPolicyData{
+			payload: &model.OrganizationPolicyData{
 				Type: "policy",
-				Attributes: &OrganizationPolicyAttributes{
+				Attributes: &model.OrganizationPolicyAttributes{
 					Type:   "data-residency", //ip-allowlist
 					Name:   "SCIMUserNameScheme of this Policy",
 					Status: "enabled", //disabled
@@ -552,9 +553,9 @@ func TestOrganizationPolicyService_Create(t *testing.T) {
 			name:           "CreateOrganizationPolicyWhenTheResponseBodyIsEmpty",
 			mockFile:       "./mocks/empty.json",
 			organizationID: "d094d850-d57e-483a-bd03-ca8855919267",
-			payload: &OrganizationPolicyData{
+			payload: &model.OrganizationPolicyData{
 				Type: "policy",
-				Attributes: &OrganizationPolicyAttributes{
+				Attributes: &model.OrganizationPolicyAttributes{
 					Type:   "data-residency", //ip-allowlist
 					Name:   "SCIMUserNameScheme of this Policy",
 					Status: "enabled", //disabled
@@ -571,9 +572,9 @@ func TestOrganizationPolicyService_Create(t *testing.T) {
 			name:           "CreateOrganizationPolicyWhenTheResponseBodyIsIncorrect",
 			mockFile:       "./mocks/get-organization-policies.json",
 			organizationID: "d094d850-d57e-483a-bd03-ca8855919267",
-			payload: &OrganizationPolicyData{
+			payload: &model.OrganizationPolicyData{
 				Type: "policy",
-				Attributes: &OrganizationPolicyAttributes{
+				Attributes: &model.OrganizationPolicyAttributes{
 					Type:   "data-residency", //ip-allowlist
 					Name:   "SCIMUserNameScheme of this Policy",
 					Status: "enabled", //disabled
@@ -665,7 +666,7 @@ func TestOrganizationPolicyService_Update(t *testing.T) {
 		name               string
 		organizationID     string
 		policyID           string
-		payload            *OrganizationPolicyData
+		payload            *model.OrganizationPolicyData
 		mockFile           string
 		wantHTTPMethod     string
 		endpoint           string
@@ -678,9 +679,9 @@ func TestOrganizationPolicyService_Update(t *testing.T) {
 			mockFile:       "./mocks/get-organization-policy.json",
 			organizationID: "d094d850-d57e-483a-bd03-ca8855919267",
 			policyID:       "60f0f660-be3e-4d70-bd34-9c2858ec040f",
-			payload: &OrganizationPolicyData{
+			payload: &model.OrganizationPolicyData{
 				Type: "policy",
-				Attributes: &OrganizationPolicyAttributes{
+				Attributes: &model.OrganizationPolicyAttributes{
 					Type:   "data-residency", //ip-allowlist
 					Name:   "SCIMUserNameScheme of this Policy",
 					Status: "enabled", //disabled
@@ -698,9 +699,9 @@ func TestOrganizationPolicyService_Update(t *testing.T) {
 			mockFile:       "./mocks/get-organization-policy.json",
 			organizationID: "",
 			policyID:       "60f0f660-be3e-4d70-bd34-9c2858ec040f",
-			payload: &OrganizationPolicyData{
+			payload: &model.OrganizationPolicyData{
 				Type: "policy",
-				Attributes: &OrganizationPolicyAttributes{
+				Attributes: &model.OrganizationPolicyAttributes{
 					Type:   "data-residency", //ip-allowlist
 					Name:   "SCIMUserNameScheme of this Policy",
 					Status: "enabled", //disabled
@@ -718,9 +719,9 @@ func TestOrganizationPolicyService_Update(t *testing.T) {
 			mockFile:       "./mocks/get-organization-policy.json",
 			organizationID: "d094d850-d57e-483a-bd03-ca8855919267",
 			policyID:       "",
-			payload: &OrganizationPolicyData{
+			payload: &model.OrganizationPolicyData{
 				Type: "policy",
-				Attributes: &OrganizationPolicyAttributes{
+				Attributes: &model.OrganizationPolicyAttributes{
 					Type:   "data-residency", //ip-allowlist
 					Name:   "SCIMUserNameScheme of this Policy",
 					Status: "enabled", //disabled
@@ -751,9 +752,9 @@ func TestOrganizationPolicyService_Update(t *testing.T) {
 			mockFile:       "./mocks/get-organization-policy.json",
 			organizationID: "d094d850-d57e-483a-bd03-ca8855919267",
 			policyID:       "60f0f660-be3e-4d70-bd34-9c2858ec040f",
-			payload: &OrganizationPolicyData{
+			payload: &model.OrganizationPolicyData{
 				Type: "policy",
-				Attributes: &OrganizationPolicyAttributes{
+				Attributes: &model.OrganizationPolicyAttributes{
 					Type:   "data-residency", //ip-allowlist
 					Name:   "SCIMUserNameScheme of this Policy",
 					Status: "enabled", //disabled
@@ -771,9 +772,9 @@ func TestOrganizationPolicyService_Update(t *testing.T) {
 			mockFile:       "./mocks/get-organization-policy.json",
 			organizationID: "d094d850-d57e-483a-bd03-ca8855919267",
 			policyID:       "60f0f660-be3e-4d70-bd34-9c2858ec040f",
-			payload: &OrganizationPolicyData{
+			payload: &model.OrganizationPolicyData{
 				Type: "policy",
-				Attributes: &OrganizationPolicyAttributes{
+				Attributes: &model.OrganizationPolicyAttributes{
 					Type:   "data-residency", //ip-allowlist
 					Name:   "SCIMUserNameScheme of this Policy",
 					Status: "enabled", //disabled
@@ -791,9 +792,9 @@ func TestOrganizationPolicyService_Update(t *testing.T) {
 			mockFile:       "./mocks/get-organization-policy.json",
 			organizationID: "d094d850-d57e-483a-bd03-ca8855919267",
 			policyID:       "60f0f660-be3e-4d70-bd34-9c2858ec040f",
-			payload: &OrganizationPolicyData{
+			payload: &model.OrganizationPolicyData{
 				Type: "policy",
-				Attributes: &OrganizationPolicyAttributes{
+				Attributes: &model.OrganizationPolicyAttributes{
 					Type:   "data-residency", //ip-allowlist
 					Name:   "SCIMUserNameScheme of this Policy",
 					Status: "enabled", //disabled
@@ -811,9 +812,9 @@ func TestOrganizationPolicyService_Update(t *testing.T) {
 			mockFile:       "./mocks/get-organization-policy.json",
 			organizationID: "d094d850-d57e-483a-bd03-ca8855919267",
 			policyID:       "60f0f660-be3e-4d70-bd34-9c2858ec040f",
-			payload: &OrganizationPolicyData{
+			payload: &model.OrganizationPolicyData{
 				Type: "policy",
-				Attributes: &OrganizationPolicyAttributes{
+				Attributes: &model.OrganizationPolicyAttributes{
 					Type:   "data-residency", //ip-allowlist
 					Name:   "SCIMUserNameScheme of this Policy",
 					Status: "enabled", //disabled
@@ -831,9 +832,9 @@ func TestOrganizationPolicyService_Update(t *testing.T) {
 			mockFile:       "./mocks/empty.json",
 			organizationID: "d094d850-d57e-483a-bd03-ca8855919267",
 			policyID:       "60f0f660-be3e-4d70-bd34-9c2858ec040f",
-			payload: &OrganizationPolicyData{
+			payload: &model.OrganizationPolicyData{
 				Type: "policy",
-				Attributes: &OrganizationPolicyAttributes{
+				Attributes: &model.OrganizationPolicyAttributes{
 					Type:   "data-residency", //ip-allowlist
 					Name:   "SCIMUserNameScheme of this Policy",
 					Status: "enabled", //disabled
@@ -851,9 +852,9 @@ func TestOrganizationPolicyService_Update(t *testing.T) {
 			mockFile:       "./mocks/get-organization-policies.json",
 			organizationID: "d094d850-d57e-483a-bd03-ca8855919267",
 			policyID:       "60f0f660-be3e-4d70-bd34-9c2858ec040f",
-			payload: &OrganizationPolicyData{
+			payload: &model.OrganizationPolicyData{
 				Type: "policy",
-				Attributes: &OrganizationPolicyAttributes{
+				Attributes: &model.OrganizationPolicyAttributes{
 					Type:   "data-residency", //ip-allowlist
 					Name:   "SCIMUserNameScheme of this Policy",
 					Status: "enabled", //disabled
diff --git a/admin/organization_test.go b/admin/organization_test.go
index 260e832..e845687 100644
--- a/admin/organization_test.go
+++ b/admin/organization_test.go
@@ -3,6 +3,7 @@ package admin
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"github.com/stretchr/testify/assert"
 	"net/http"
 	"net/url"
@@ -912,7 +913,7 @@ func TestOrganizationService_Events(t *testing.T) {
 	testCases := []struct {
 		name               string
 		organizationID     string
-		opts               *OrganizationEventOptScheme
+		opts               *model.OrganizationEventOptScheme
 		cursor             string
 		mockFile           string
 		wantHTTPMethod     string
@@ -925,7 +926,7 @@ func TestOrganizationService_Events(t *testing.T) {
 			name:           "GetOrganizationAuditEventsWhenTheParametersAreCorrect",
 			mockFile:       "./mocks/get-organization-audit-events.json",
 			organizationID: "d094d850-d57e-483a-bd03-ca8855919267",
-			opts: &OrganizationEventOptScheme{
+			opts: &model.OrganizationEventOptScheme{
 				Q:      "qq",
 				From:   fromMocked.Add(time.Duration(-24) * time.Hour),
 				To:     toMocked.Add(time.Duration(-1) * time.Hour),
@@ -943,7 +944,7 @@ func TestOrganizationService_Events(t *testing.T) {
 			name:           "GetOrganizationAuditEventsWhenTheResponseBodyIsEmpty",
 			mockFile:       "./mocks/empty.json",
 			organizationID: "d094d850-d57e-483a-bd03-ca8855919267",
-			opts: &OrganizationEventOptScheme{
+			opts: &model.OrganizationEventOptScheme{
 				Q:      "qq",
 				From:   fromMocked.Add(time.Duration(-24) * time.Hour),
 				To:     toMocked.Add(time.Duration(-1) * time.Hour),
diff --git a/admin/scimGroup_test.go b/admin/scimGroup_test.go
index ec11dfc..3117621 100644
--- a/admin/scimGroup_test.go
+++ b/admin/scimGroup_test.go
@@ -3,6 +3,7 @@ package admin
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"github.com/stretchr/testify/assert"
 	"net/http"
 	"net/url"
@@ -958,13 +959,13 @@ func TestSCIMGroupService_Delete(t *testing.T) {
 
 func TestSCIMGroupService_Path(t *testing.T) {
 
-	payloadWithOperationsMocked := &SCIMGroupPathScheme{
+	payloadWithOperationsMocked := &model.SCIMGroupPathScheme{
 		Schemas: []string{"urn:ietf:params:scim:api:messages:2.0:PatchOp"},
-		Operations: []*SCIMGroupOperationScheme{
+		Operations: []*model.SCIMGroupOperationScheme{
 			{
 				Op:   "add",
 				Path: "members",
-				Value: []*SCIMGroupOperationValueScheme{
+				Value: []*model.SCIMGroupOperationValueScheme{
 					{
 						Value:   "635cdb2f-e72c-4122-bfd3-3aa",
 						Display: "Example Display Name",
@@ -974,7 +975,7 @@ func TestSCIMGroupService_Path(t *testing.T) {
 		},
 	}
 
-	payloadWithOutOperationsMocked := &SCIMGroupPathScheme{
+	payloadWithOutOperationsMocked := &model.SCIMGroupPathScheme{
 		Schemas: []string{"urn:ietf:params:scim:api:messages:2.0:PatchOp"},
 	}
 
@@ -982,7 +983,7 @@ func TestSCIMGroupService_Path(t *testing.T) {
 		name               string
 		directoryID        string
 		groupID            string
-		payload            *SCIMGroupPathScheme
+		payload            *model.SCIMGroupPathScheme
 		mockFile           string
 		wantHTTPMethod     string
 		endpoint           string
diff --git a/admin/scimUser_test.go b/admin/scimUser_test.go
index e18edf5..d7ce54e 100644
--- a/admin/scimUser_test.go
+++ b/admin/scimUser_test.go
@@ -3,6 +3,7 @@ package admin
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"github.com/stretchr/testify/assert"
 	"net/http"
 	"net/url"
@@ -14,7 +15,7 @@ func TestSCIMUserService_Create(t *testing.T) {
 	testCases := []struct {
 		name                           string
 		directoryID                    string
-		payload                        *SCIMUserScheme
+		payload                        *model.SCIMUserScheme
 		attributes, excludedAttributes []string
 		mockFile                       string
 		wantHTTPMethod                 string
@@ -26,16 +27,16 @@ func TestSCIMUserService_Create(t *testing.T) {
 		{
 			name:        "CreateSCIMUserWhenTheParametersAreCorrect",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
-			payload: &SCIMUserScheme{
+			payload: &model.SCIMUserScheme{
 				UserName: "Example Username 2",
-				Emails: []*SCIMUserEmailScheme{
+				Emails: []*model.SCIMUserEmailScheme{
 					{
 						Value:   "example-2@go-atlassian.io",
 						Type:    "work",
 						Primary: true,
 					},
 				},
-				Name: &SCIMUserNameScheme{
+				Name: &model.SCIMUserNameScheme{
 					Formatted:       "Example Full Name with Last Name",
 					FamilyName:      "Example Family Name",
 					GivenName:       "Example Name",
@@ -63,16 +64,16 @@ func TestSCIMUserService_Create(t *testing.T) {
 		{
 			name:        "CreateSCIMUserWhenTheAttributesAndExcludedAttributesAreNotSet",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
-			payload: &SCIMUserScheme{
+			payload: &model.SCIMUserScheme{
 				UserName: "Example Username 2",
-				Emails: []*SCIMUserEmailScheme{
+				Emails: []*model.SCIMUserEmailScheme{
 					{
 						Value:   "example-2@go-atlassian.io",
 						Type:    "work",
 						Primary: true,
 					},
 				},
-				Name: &SCIMUserNameScheme{
+				Name: &model.SCIMUserNameScheme{
 					Formatted:       "Example Full Name with Last Name",
 					FamilyName:      "Example Family Name",
 					GivenName:       "Example Name",
@@ -114,16 +115,16 @@ func TestSCIMUserService_Create(t *testing.T) {
 		{
 			name:        "CreateSCIMUserWhenTheDirectoryIDIsNotSet",
 			directoryID: "",
-			payload: &SCIMUserScheme{
+			payload: &model.SCIMUserScheme{
 				UserName: "Example Username 2",
-				Emails: []*SCIMUserEmailScheme{
+				Emails: []*model.SCIMUserEmailScheme{
 					{
 						Value:   "example-2@go-atlassian.io",
 						Type:    "work",
 						Primary: true,
 					},
 				},
-				Name: &SCIMUserNameScheme{
+				Name: &model.SCIMUserNameScheme{
 					Formatted:       "Example Full Name with Last Name",
 					FamilyName:      "Example Family Name",
 					GivenName:       "Example Name",
@@ -151,16 +152,16 @@ func TestSCIMUserService_Create(t *testing.T) {
 		{
 			name:        "CreateSCIMUserWhenTheRequestMethodIsIncorrect",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
-			payload: &SCIMUserScheme{
+			payload: &model.SCIMUserScheme{
 				UserName: "Example Username 2",
-				Emails: []*SCIMUserEmailScheme{
+				Emails: []*model.SCIMUserEmailScheme{
 					{
 						Value:   "example-2@go-atlassian.io",
 						Type:    "work",
 						Primary: true,
 					},
 				},
-				Name: &SCIMUserNameScheme{
+				Name: &model.SCIMUserNameScheme{
 					Formatted:       "Example Full Name with Last Name",
 					FamilyName:      "Example Family Name",
 					GivenName:       "Example Name",
@@ -188,16 +189,16 @@ func TestSCIMUserService_Create(t *testing.T) {
 		{
 			name:        "CreateSCIMUserWhenTheStatusCodeIsIncorrect",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
-			payload: &SCIMUserScheme{
+			payload: &model.SCIMUserScheme{
 				UserName: "Example Username 2",
-				Emails: []*SCIMUserEmailScheme{
+				Emails: []*model.SCIMUserEmailScheme{
 					{
 						Value:   "example-2@go-atlassian.io",
 						Type:    "work",
 						Primary: true,
 					},
 				},
-				Name: &SCIMUserNameScheme{
+				Name: &model.SCIMUserNameScheme{
 					Formatted:       "Example Full Name with Last Name",
 					FamilyName:      "Example Family Name",
 					GivenName:       "Example Name",
@@ -225,16 +226,16 @@ func TestSCIMUserService_Create(t *testing.T) {
 		{
 			name:        "CreateSCIMUserWhenTheContextIsNil",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
-			payload: &SCIMUserScheme{
+			payload: &model.SCIMUserScheme{
 				UserName: "Example Username 2",
-				Emails: []*SCIMUserEmailScheme{
+				Emails: []*model.SCIMUserEmailScheme{
 					{
 						Value:   "example-2@go-atlassian.io",
 						Type:    "work",
 						Primary: true,
 					},
 				},
-				Name: &SCIMUserNameScheme{
+				Name: &model.SCIMUserNameScheme{
 					Formatted:       "Example Full Name with Last Name",
 					FamilyName:      "Example Family Name",
 					GivenName:       "Example Name",
@@ -262,16 +263,16 @@ func TestSCIMUserService_Create(t *testing.T) {
 		{
 			name:        "CreateSCIMUserWhenTheEndpointIsEmpty",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
-			payload: &SCIMUserScheme{
+			payload: &model.SCIMUserScheme{
 				UserName: "Example Username 2",
-				Emails: []*SCIMUserEmailScheme{
+				Emails: []*model.SCIMUserEmailScheme{
 					{
 						Value:   "example-2@go-atlassian.io",
 						Type:    "work",
 						Primary: true,
 					},
 				},
-				Name: &SCIMUserNameScheme{
+				Name: &model.SCIMUserNameScheme{
 					Formatted:       "Example Full Name with Last Name",
 					FamilyName:      "Example Family Name",
 					GivenName:       "Example Name",
@@ -299,16 +300,16 @@ func TestSCIMUserService_Create(t *testing.T) {
 		{
 			name:        "CreateSCIMUserWhenTheResponseBodyIsEmpty",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
-			payload: &SCIMUserScheme{
+			payload: &model.SCIMUserScheme{
 				UserName: "Example Username 2",
-				Emails: []*SCIMUserEmailScheme{
+				Emails: []*model.SCIMUserEmailScheme{
 					{
 						Value:   "example-2@go-atlassian.io",
 						Type:    "work",
 						Primary: true,
 					},
 				},
-				Name: &SCIMUserNameScheme{
+				Name: &model.SCIMUserNameScheme{
 					Formatted:       "Example Full Name with Last Name",
 					FamilyName:      "Example Family Name",
 					GivenName:       "Example Name",
@@ -420,7 +421,7 @@ func TestSCIMUserService_Gets(t *testing.T) {
 	testCases := []struct {
 		name               string
 		directoryID        string
-		opts               *SCIMUserGetsOptionsScheme
+		opts               *model.SCIMUserGetsOptionsScheme
 		startIndex         int
 		count              int
 		mockFile           string
@@ -433,7 +434,7 @@ func TestSCIMUserService_Gets(t *testing.T) {
 		{
 			name:        "CreateSCIMUserWhenTheParametersAreCorrect",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
-			opts: &SCIMUserGetsOptionsScheme{
+			opts: &model.SCIMUserGetsOptionsScheme{
 				Attributes:         []string{"userName", "emails.value"},
 				ExcludedAttributes: []string{"timezone", "department"},
 				Filter:             "users",
@@ -451,7 +452,7 @@ func TestSCIMUserService_Gets(t *testing.T) {
 		{
 			name:        "CreateSCIMUserWhenTheDirectoryIDIsNotSet",
 			directoryID: "",
-			opts: &SCIMUserGetsOptionsScheme{
+			opts: &model.SCIMUserGetsOptionsScheme{
 				Attributes:         []string{"userName", "emails.value"},
 				ExcludedAttributes: []string{"timezone", "department"},
 				Filter:             "users",
@@ -483,7 +484,7 @@ func TestSCIMUserService_Gets(t *testing.T) {
 		{
 			name:        "CreateSCIMUserWhenTheRequestMethodIsIncorrect",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
-			opts: &SCIMUserGetsOptionsScheme{
+			opts: &model.SCIMUserGetsOptionsScheme{
 				Attributes:         []string{"userName", "emails.value"},
 				ExcludedAttributes: []string{"timezone", "department"},
 				Filter:             "users",
@@ -501,7 +502,7 @@ func TestSCIMUserService_Gets(t *testing.T) {
 		{
 			name:        "CreateSCIMUserWhenTheStatusCodeIsIncorrect",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
-			opts: &SCIMUserGetsOptionsScheme{
+			opts: &model.SCIMUserGetsOptionsScheme{
 				Attributes:         []string{"userName", "emails.value"},
 				ExcludedAttributes: []string{"timezone", "department"},
 				Filter:             "users",
@@ -519,7 +520,7 @@ func TestSCIMUserService_Gets(t *testing.T) {
 		{
 			name:        "CreateSCIMUserWhenTheContextIsNil",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
-			opts: &SCIMUserGetsOptionsScheme{
+			opts: &model.SCIMUserGetsOptionsScheme{
 				Attributes:         []string{"userName", "emails.value"},
 				ExcludedAttributes: []string{"timezone", "department"},
 				Filter:             "users",
@@ -537,7 +538,7 @@ func TestSCIMUserService_Gets(t *testing.T) {
 		{
 			name:        "CreateSCIMUserWhenTheEndpointIsEmpty",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
-			opts: &SCIMUserGetsOptionsScheme{
+			opts: &model.SCIMUserGetsOptionsScheme{
 				Attributes:         []string{"userName", "emails.value"},
 				ExcludedAttributes: []string{"timezone", "department"},
 				Filter:             "users",
@@ -555,7 +556,7 @@ func TestSCIMUserService_Gets(t *testing.T) {
 		{
 			name:        "CreateSCIMUserWhenTheResponseBodyIsEmpty",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
-			opts: &SCIMUserGetsOptionsScheme{
+			opts: &model.SCIMUserGetsOptionsScheme{
 				Attributes:         []string{"userName", "emails.value"},
 				ExcludedAttributes: []string{"timezone", "department"},
 				Filter:             "users",
@@ -1048,7 +1049,7 @@ func TestSCIMUserService_Update(t *testing.T) {
 		name                           string
 		directoryID                    string
 		userID                         string
-		payload                        *SCIMUserScheme
+		payload                        *model.SCIMUserScheme
 		attributes, excludedAttributes []string
 		mockFile                       string
 		wantHTTPMethod                 string
@@ -1061,16 +1062,16 @@ func TestSCIMUserService_Update(t *testing.T) {
 			name:        "OverwriteSCIMUserWhenTheParametersAreCorrect",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
 			userID:      "ef5ff80e-9ca6-449c-8cca-5b621085c6c9",
-			payload: &SCIMUserScheme{
+			payload: &model.SCIMUserScheme{
 				UserName: "Example Username 2",
-				Emails: []*SCIMUserEmailScheme{
+				Emails: []*model.SCIMUserEmailScheme{
 					{
 						Value:   "example-2@go-atlassian.io",
 						Type:    "work",
 						Primary: true,
 					},
 				},
-				Name: &SCIMUserNameScheme{
+				Name: &model.SCIMUserNameScheme{
 					Formatted:       "Example Full Name with Last Name",
 					FamilyName:      "Example Family Name",
 					GivenName:       "Example Name",
@@ -1099,16 +1100,16 @@ func TestSCIMUserService_Update(t *testing.T) {
 			name:        "OverwriteSCIMUserWhenTheUserIDIsNotSet",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
 			userID:      "",
-			payload: &SCIMUserScheme{
+			payload: &model.SCIMUserScheme{
 				UserName: "Example Username 2",
-				Emails: []*SCIMUserEmailScheme{
+				Emails: []*model.SCIMUserEmailScheme{
 					{
 						Value:   "example-2@go-atlassian.io",
 						Type:    "work",
 						Primary: true,
 					},
 				},
-				Name: &SCIMUserNameScheme{
+				Name: &model.SCIMUserNameScheme{
 					Formatted:       "Example Full Name with Last Name",
 					FamilyName:      "Example Family Name",
 					GivenName:       "Example Name",
@@ -1137,16 +1138,16 @@ func TestSCIMUserService_Update(t *testing.T) {
 			name:        "OverwriteSCIMUserWhenTheAttributesAndExcludedAttributesAreNotSet",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
 			userID:      "ef5ff80e-9ca6-449c-8cca-5b621085c6c9",
-			payload: &SCIMUserScheme{
+			payload: &model.SCIMUserScheme{
 				UserName: "Example Username 2",
-				Emails: []*SCIMUserEmailScheme{
+				Emails: []*model.SCIMUserEmailScheme{
 					{
 						Value:   "example-2@go-atlassian.io",
 						Type:    "work",
 						Primary: true,
 					},
 				},
-				Name: &SCIMUserNameScheme{
+				Name: &model.SCIMUserNameScheme{
 					Formatted:       "Example Full Name with Last Name",
 					FamilyName:      "Example Family Name",
 					GivenName:       "Example Name",
@@ -1191,16 +1192,16 @@ func TestSCIMUserService_Update(t *testing.T) {
 			name:        "OverwriteSCIMUserWhenTheDirectoryIDIsNotSet",
 			directoryID: "",
 			userID:      "ef5ff80e-9ca6-449c-8cca-5b621085c6c9",
-			payload: &SCIMUserScheme{
+			payload: &model.SCIMUserScheme{
 				UserName: "Example Username 2",
-				Emails: []*SCIMUserEmailScheme{
+				Emails: []*model.SCIMUserEmailScheme{
 					{
 						Value:   "example-2@go-atlassian.io",
 						Type:    "work",
 						Primary: true,
 					},
 				},
-				Name: &SCIMUserNameScheme{
+				Name: &model.SCIMUserNameScheme{
 					Formatted:       "Example Full Name with Last Name",
 					FamilyName:      "Example Family Name",
 					GivenName:       "Example Name",
@@ -1230,16 +1231,16 @@ func TestSCIMUserService_Update(t *testing.T) {
 			name:        "OverwriteSCIMUserWhenTheRequestMethodIsIncorrect",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
 			userID:      "ef5ff80e-9ca6-449c-8cca-5b621085c6c9",
-			payload: &SCIMUserScheme{
+			payload: &model.SCIMUserScheme{
 				UserName: "Example Username 2",
-				Emails: []*SCIMUserEmailScheme{
+				Emails: []*model.SCIMUserEmailScheme{
 					{
 						Value:   "example-2@go-atlassian.io",
 						Type:    "work",
 						Primary: true,
 					},
 				},
-				Name: &SCIMUserNameScheme{
+				Name: &model.SCIMUserNameScheme{
 					Formatted:       "Example Full Name with Last Name",
 					FamilyName:      "Example Family Name",
 					GivenName:       "Example Name",
@@ -1269,16 +1270,16 @@ func TestSCIMUserService_Update(t *testing.T) {
 			name:        "OverwriteSCIMUserWhenTheStatusCodeIsIncorrect",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
 			userID:      "ef5ff80e-9ca6-449c-8cca-5b621085c6c9",
-			payload: &SCIMUserScheme{
+			payload: &model.SCIMUserScheme{
 				UserName: "Example Username 2",
-				Emails: []*SCIMUserEmailScheme{
+				Emails: []*model.SCIMUserEmailScheme{
 					{
 						Value:   "example-2@go-atlassian.io",
 						Type:    "work",
 						Primary: true,
 					},
 				},
-				Name: &SCIMUserNameScheme{
+				Name: &model.SCIMUserNameScheme{
 					Formatted:       "Example Full Name with Last Name",
 					FamilyName:      "Example Family Name",
 					GivenName:       "Example Name",
@@ -1308,16 +1309,16 @@ func TestSCIMUserService_Update(t *testing.T) {
 			name:        "OverwriteSCIMUserWhenTheContextIsNil",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
 			userID:      "ef5ff80e-9ca6-449c-8cca-5b621085c6c9",
-			payload: &SCIMUserScheme{
+			payload: &model.SCIMUserScheme{
 				UserName: "Example Username 2",
-				Emails: []*SCIMUserEmailScheme{
+				Emails: []*model.SCIMUserEmailScheme{
 					{
 						Value:   "example-2@go-atlassian.io",
 						Type:    "work",
 						Primary: true,
 					},
 				},
-				Name: &SCIMUserNameScheme{
+				Name: &model.SCIMUserNameScheme{
 					Formatted:       "Example Full Name with Last Name",
 					FamilyName:      "Example Family Name",
 					GivenName:       "Example Name",
@@ -1347,16 +1348,16 @@ func TestSCIMUserService_Update(t *testing.T) {
 			name:        "OverwriteSCIMUserWhenTheEndpointIsEmpty",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
 			userID:      "ef5ff80e-9ca6-449c-8cca-5b621085c6c9",
-			payload: &SCIMUserScheme{
+			payload: &model.SCIMUserScheme{
 				UserName: "Example Username 2",
-				Emails: []*SCIMUserEmailScheme{
+				Emails: []*model.SCIMUserEmailScheme{
 					{
 						Value:   "example-2@go-atlassian.io",
 						Type:    "work",
 						Primary: true,
 					},
 				},
-				Name: &SCIMUserNameScheme{
+				Name: &model.SCIMUserNameScheme{
 					Formatted:       "Example Full Name with Last Name",
 					FamilyName:      "Example Family Name",
 					GivenName:       "Example Name",
@@ -1385,16 +1386,16 @@ func TestSCIMUserService_Update(t *testing.T) {
 			name:        "OverwriteSCIMUserWhenTheResponseBodyIsEmpty",
 			directoryID: "651c2e11-afea-4475-a0c4-422b89683e0f",
 			userID:      "ef5ff80e-9ca6-449c-8cca-5b621085c6c9",
-			payload: &SCIMUserScheme{
+			payload: &model.SCIMUserScheme{
 				UserName: "Example Username 2",
-				Emails: []*SCIMUserEmailScheme{
+				Emails: []*model.SCIMUserEmailScheme{
 					{
 						Value:   "example-2@go-atlassian.io",
 						Type:    "work",
 						Primary: true,
 					},
 				},
-				Name: &SCIMUserNameScheme{
+				Name: &model.SCIMUserNameScheme{
 					Formatted:       "Example Full Name with Last Name",
 					FamilyName:      "Example Family Name",
 					GivenName:       "Example Name",
@@ -1504,7 +1505,7 @@ func TestSCIMUserService_Update(t *testing.T) {
 
 func TestSCIMUserService_Path(t *testing.T) {
 
-	payload := &SCIMUserToPathScheme{
+	payload := &model.SCIMUserToPathScheme{
 		Schemas: []string{"urn:ietf:params:scim:api:messages:2.0:PatchOp"},
 	}
 
@@ -1520,7 +1521,7 @@ func TestSCIMUserService_Path(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	if err := payload.AddComplexOperation("add", "emails", []*SCIMUserComplexOperationScheme{
+	if err := payload.AddComplexOperation("add", "emails", []*model.SCIMUserComplexOperationScheme{
 		{
 			Value:     "primary@go-atlassian.io",
 			ValueType: "work",
@@ -1539,7 +1540,7 @@ func TestSCIMUserService_Path(t *testing.T) {
 		name                           string
 		directoryID                    string
 		userID                         string
-		payload                        *SCIMUserToPathScheme
+		payload                        *model.SCIMUserToPathScheme
 		attributes, excludedAttributes []string
 		mockFile                       string
 		wantHTTPMethod                 string
@@ -1797,7 +1798,7 @@ func TestSCIMUserService_Path(t *testing.T) {
 func TestSCIMUserToPathScheme_AddBoolOperation(t *testing.T) {
 	type fields struct {
 		Schemas    []string
-		Operations []*SCIMUserToPathOperationScheme
+		Operations []*model.SCIMUserToPathOperationScheme
 	}
 	type args struct {
 		operation string
@@ -1840,7 +1841,7 @@ func TestSCIMUserToPathScheme_AddBoolOperation(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			s := &SCIMUserToPathScheme{
+			s := &model.SCIMUserToPathScheme{
 				Schemas:    tt.fields.Schemas,
 				Operations: tt.fields.Operations,
 			}
@@ -1854,12 +1855,12 @@ func TestSCIMUserToPathScheme_AddBoolOperation(t *testing.T) {
 func TestSCIMUserToPathScheme_AddComplexOperation(t *testing.T) {
 	type fields struct {
 		Schemas    []string
-		Operations []*SCIMUserToPathOperationScheme
+		Operations []*model.SCIMUserToPathOperationScheme
 	}
 	type args struct {
 		operation string
 		path      string
-		values    []*SCIMUserComplexOperationScheme
+		values    []*model.SCIMUserComplexOperationScheme
 	}
 	tests := []struct {
 		name    string
@@ -1876,7 +1877,7 @@ func TestSCIMUserToPathScheme_AddComplexOperation(t *testing.T) {
 			args: args{
 				operation: "replace",
 				path:      "emails",
-				values: []*SCIMUserComplexOperationScheme{
+				values: []*model.SCIMUserComplexOperationScheme{
 					{
 						Value:     "primary@go-atlassian.io",
 						ValueType: "work",
@@ -1901,7 +1902,7 @@ func TestSCIMUserToPathScheme_AddComplexOperation(t *testing.T) {
 			args: args{
 				operation: "",
 				path:      "emails",
-				values: []*SCIMUserComplexOperationScheme{
+				values: []*model.SCIMUserComplexOperationScheme{
 					{
 						Value:     "primary@go-atlassian.io",
 						ValueType: "work",
@@ -1926,7 +1927,7 @@ func TestSCIMUserToPathScheme_AddComplexOperation(t *testing.T) {
 			args: args{
 				operation: "replace",
 				path:      "",
-				values: []*SCIMUserComplexOperationScheme{
+				values: []*model.SCIMUserComplexOperationScheme{
 					{
 						Value:     "primary@go-atlassian.io",
 						ValueType: "work",
@@ -1965,14 +1966,14 @@ func TestSCIMUserToPathScheme_AddComplexOperation(t *testing.T) {
 			args: args{
 				operation: "replace",
 				path:      "emails",
-				values:    []*SCIMUserComplexOperationScheme{},
+				values:    []*model.SCIMUserComplexOperationScheme{},
 			},
 			wantErr: true,
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			s := &SCIMUserToPathScheme{
+			s := &model.SCIMUserToPathScheme{
 				Schemas:    tt.fields.Schemas,
 				Operations: tt.fields.Operations,
 			}
@@ -1986,7 +1987,7 @@ func TestSCIMUserToPathScheme_AddComplexOperation(t *testing.T) {
 func TestSCIMUserToPathScheme_AddStringOperation(t *testing.T) {
 	type fields struct {
 		Schemas    []string
-		Operations []*SCIMUserToPathOperationScheme
+		Operations []*model.SCIMUserToPathOperationScheme
 	}
 	type args struct {
 		operation string
@@ -2057,7 +2058,7 @@ func TestSCIMUserToPathScheme_AddStringOperation(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			s := &SCIMUserToPathScheme{
+			s := &model.SCIMUserToPathScheme{
 				Schemas:    tt.fields.Schemas,
 				Operations: tt.fields.Operations,
 			}