Repository: ctreminiom/go-atlassian
Pull request #83 (2021-11-21 03:36:30)

:truck: Moved the Confluence models to a dedicated shared package


Patch:
diff --git a/confluence/content.go b/confluence/content.go
index 5363b29..d535be9 100644
--- a/confluence/content.go
+++ b/confluence/content.go
@@ -3,11 +3,11 @@ package confluence
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
-	"time"
 )
 
 type ContentService struct {
@@ -20,171 +20,9 @@ type ContentService struct {
 	Property           *ContentPropertyService
 }
 
-type GetContentOptionsScheme struct {
-	ContextType, SpaceKey   string
-	Title, Trigger, OrderBy string
-	Status, Expand          []string
-	PostingDay              time.Time
-}
-
-type ContentPageScheme struct {
-	Results []*ContentScheme `json:"results"`
-	Start   int              `json:"start"`
-	Limit   int              `json:"limit"`
-	Size    int              `json:"size"`
-	Links   *LinkScheme      `json:"_links"`
-}
-
-type LinkScheme struct {
-	Base     string `json:"base,omitempty"`
-	Context  string `json:"context,omitempty"`
-	Self     string `json:"self,omitempty"`
-	Tinyui   string `json:"tinyui,omitempty"`
-	Editui   string `json:"editui,omitempty"`
-	Webui    string `json:"webui,omitempty"`
-	Download string `json:"download,omitempty"`
-	Next     string `json:"next"`
-}
-
-type ContentScheme struct {
-	ID         string                  `json:"id,omitempty"`
-	Type       string                  `json:"type,omitempty"`
-	Status     string                  `json:"status,omitempty"`
-	Title      string                  `json:"title,omitempty"`
-	Expandable *ExpandableScheme       `json:"_expandable,omitempty"`
-	Links      *LinkScheme             `json:"_links,omitempty"`
-	ChildTypes *ChildTypesScheme       `json:"childTypes,omitempty"`
-	Space      *SpaceScheme            `json:"space,omitempty"`
-	Metadata   *MetadataScheme         `json:"metadata,omitempty"`
-	Operations []*OperationScheme      `json:"operations,omitempty"`
-	Body       *BodyScheme             `json:"body,omitempty"`
-	Version    *VersionScheme          `json:"version,omitempty"`
-	Extensions *ContentExtensionScheme `json:"extensions,omitempty"`
-	Ancestors  []*ContentScheme        `json:"ancestors,omitempty"`
-}
-
-type ContentExtensionScheme struct {
-	MediaType            string `json:"mediaType,omitempty"`
-	FileSize             int    `json:"fileSize,omitempty"`
-	Comment              string `json:"comment,omitempty"`
-	MediaTypeDescription string `json:"mediaTypeDescription,omitempty"`
-	FileID               string `json:"fileId,omitempty"`
-}
-
-type VersionScheme struct {
-	By            *UserScheme                 `json:"by,omitempty"`
-	Number        int                         `json:"number,omitempty"`
-	When          string                      `json:"when,omitempty"`
-	FriendlyWhen  string                      `json:"friendlyWhen,omitempty"`
-	Message       string                      `json:"message,omitempty"`
-	MinorEdit     bool                        `json:"minorEdit,omitempty"`
-	Content       *ContentScheme              `json:"content,omitempty"`
-	Collaborators *VersionCollaboratorsScheme `json:"collaborators,omitempty"`
-	Expandable    struct {
-		Content       string `json:"content"`
-		Collaborators string `json:"collaborators"`
-	} `json:"_expandable"`
-	ContentTypeModified bool `json:"contentTypeModified"`
-}
-
-type VersionCollaboratorsScheme struct {
-	Users    []*UserScheme `json:"users,omitempty"`
-	UserKeys []string      `json:"userKeys,omitempty"`
-}
-
-type BodyScheme struct {
-	View                *BodyNodeScheme `json:"view"`
-	ExportView          *BodyNodeScheme `json:"export_view"`
-	StyledView          *BodyNodeScheme `json:"styled_view"`
-	Storage             *BodyNodeScheme `json:"storage"`
-	Editor2             *BodyNodeScheme `json:"editor2"`
-	AnonymousExportView *BodyNodeScheme `json:"anonymous_export_view"`
-}
-
-type BodyNodeScheme struct {
-	Value          string `json:"value,omitempty"`
-	Representation string `json:"representation,omitempty"`
-}
-
-type OperationScheme struct {
-	Operation  string `json:"operation,omitempty"`
-	TargetType string `json:"targetType,omitempty"`
-}
-
-type MetadataScheme struct {
-	Labels     *LabelsScheme     `json:"labels"`
-	Expandable *ExpandableScheme `json:"_expandable,omitempty"`
-	MediaType  string            `json:"mediaType,omitempty"`
-}
-
-type LabelsScheme struct {
-	Results []*LabelValueScheme `json:"results,omitempty"`
-	Start   int                 `json:"start,omitempty"`
-	Limit   int                 `json:"limit,omitempty"`
-	Size    int                 `json:"size,omitempty"`
-	Links   *LinkScheme         `json:"_links,omitempty"`
-}
-
-type LabelValueScheme struct {
-	Prefix string `json:"prefix,omitempty"`
-	Name   string `json:"name,omitempty"`
-	ID     string `json:"id,omitempty"`
-	Label  string `json:"label,omitempty"`
-}
-
-type SpaceScheme struct {
-	ID         int               `json:"id"`
-	Key        string            `json:"key"`
-	Name       string            `json:"name"`
-	Type       string            `json:"type"`
-	Status     string            `json:"status"`
-	Expandable *ExpandableScheme `json:"_expandable"`
-	Links      *LinkScheme       `json:"_links"`
-}
-
-type ChildTypesScheme struct {
-	Attachment *ChildTypeScheme `json:"attachment,omitempty"`
-	Comment    *ChildTypeScheme `json:"comment,omitempty"`
-	Page       *ChildTypeScheme `json:"page,omitempty"`
-}
-
-type ChildTypeScheme struct {
-	Value bool `json:"value,omitempty"`
-	Links struct {
-		Self string `json:"self,omitempty"`
-	} `json:"_links,omitempty"`
-}
-
-type ExpandableScheme struct {
-	Container           string `json:"container"`
-	Metadata            string `json:"metadata"`
-	Restrictions        string `json:"restrictions"`
-	History             string `json:"history"`
-	Body                string `json:"body"`
-	Version             string `json:"version"`
-	Descendants         string `json:"descendants"`
-	Space               string `json:"space"`
-	ChildTypes          string `json:"childTypes"`
-	Operations          string `json:"operations"`
-	SchedulePublishDate string `json:"schedulePublishDate"`
-	Children            string `json:"children"`
-	Ancestors           string `json:"ancestors"`
-	Settings            string `json:"settings"`
-	LookAndFeel         string `json:"lookAndFeel"`
-	Identifiers         string `json:"identifiers"`
-	Permissions         string `json:"permissions"`
-	Icon                string `json:"icon"`
-	Description         string `json:"description"`
-	Theme               string `json:"theme"`
-	Homepage            string `json:"homepage"`
-	LastUpdated         string `json:"lastUpdated"`
-	PreviousVersion     string `json:"previousVersion"`
-	Contributors        string `json:"contributors"`
-	NextVersion         string `json:"nextVersion"`
-}
-
 // Gets returns all content in a Confluence instance.
-func (c *ContentService) Gets(ctx context.Context, options *GetContentOptionsScheme, startAt, maxResults int) (result *ContentPageScheme, response *ResponseScheme, err error) {
+func (c *ContentService) Gets(ctx context.Context, options *model.GetContentOptionsScheme, startAt, maxResults int) (
+	result *model.ContentPageScheme, response *ResponseScheme, err error) {
 
 	query := url.Values{}
 	query.Add("start", strconv.Itoa(startAt))
@@ -247,7 +85,8 @@ func (c *ContentService) Gets(ctx context.Context, options *GetContentOptionsSch
 // To publish a draft, add the id and status properties to the body of the request.
 // Set the id to the ID of the draft and set the status to 'current'.
 // When the request is sent, a new piece of content will be created and the metadata from the draft will be transferred into it.
-func (c *ContentService) Create(ctx context.Context, payload *ContentScheme) (result *ContentScheme, response *ResponseScheme, err error) {
+func (c *ContentService) Create(ctx context.Context, payload *model.ContentScheme) (result *model.ContentScheme,
+	response *ResponseScheme, err error) {
 
 	payloadAsReader, err := transformStructToReader(payload)
 	if err != nil {
@@ -273,10 +112,11 @@ func (c *ContentService) Create(ctx context.Context, payload *ContentScheme) (re
 }
 
 // Search returns the list of content that matches a Confluence Query Language (CQL) query
-func (c *ContentService) Search(ctx context.Context, cql, cqlContext string, expand []string, cursor string, maxResults int) (result *ContentPageScheme, response *ResponseScheme, err error) {
+func (c *ContentService) Search(ctx context.Context, cql, cqlContext string, expand []string, cursor string, maxResults int) (
+	result *model.ContentPageScheme, response *ResponseScheme, err error) {
 
 	if cql == "" {
-		return nil, nil, notCqlProvidedError
+		return nil, nil, model.ErrNoCQLError
 	}
 
 	query := url.Values{}
@@ -314,10 +154,11 @@ func (c *ContentService) Search(ctx context.Context, cql, cqlContext string, exp
 
 // Get returns a single piece of content, like a page or a blog post.
 // By default, the following objects are expanded: space, history, version.
-func (c *ContentService) Get(ctx context.Context, contentID string, expand []string, version int) (result *ContentScheme, response *ResponseScheme, err error) {
+func (c *ContentService) Get(ctx context.Context, contentID string, expand []string, version int) (result *model.ContentScheme,
+	response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, nil, notContentIDError
+		return nil, nil, model.ErrNoContentIDError
 	}
 
 	query := url.Values{}
@@ -354,10 +195,11 @@ func (c *ContentService) Get(ctx context.Context, contentID string, expand []str
 
 // Update updates a piece of content.
 // Use this method to update the title or body of a piece of content, change the status, change the parent page, and more.
-func (c *ContentService) Update(ctx context.Context, contentID string, payload *ContentScheme) (result *ContentScheme, response *ResponseScheme, err error) {
+func (c *ContentService) Update(ctx context.Context, contentID string, payload *model.ContentScheme) (result *model.ContentScheme,
+	response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, nil, notContentIDError
+		return nil, nil, model.ErrNoContentIDError
 	}
 
 	payloadAsReader, err := transformStructToReader(payload)
@@ -392,7 +234,7 @@ func (c *ContentService) Update(ctx context.Context, contentID string, payload *
 func (c *ContentService) Delete(ctx context.Context, contentID, status string) (response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, notContentIDError
+		return nil, model.ErrNoContentIDError
 	}
 
 	query := url.Values{}
@@ -420,69 +262,12 @@ func (c *ContentService) Delete(ctx context.Context, contentID, status string) (
 	return
 }
 
-type ContentHistoryScheme struct {
-	Latest          bool                              `json:"latest,omitempty"`
-	CreatedBy       *UserScheme                       `json:"createdBy,omitempty"`
-	CreatedDate     string                            `json:"createdDate,omitempty"`
-	LastUpdated     *VersionScheme                    `json:"lastUpdated,omitempty"`
-	PreviousVersion *VersionScheme                    `json:"previousVersion,omitempty"`
-	Contributors    *ContentHistoryContributorsScheme `json:"contributors,omitempty"`
-	NextVersion     *VersionScheme                    `json:"nextVersion,omitempty"`
-	Expandable      *ExpandableScheme                 `json:"_expandable,omitempty"`
-	Links           *LinkScheme                       `json:"_links,omitempty"`
-}
-
-type ContentHistoryContributorsScheme struct {
-	Publishers *VersionCollaboratorsScheme `json:"publishers,omitempty"`
-}
-
-type UserScheme struct {
-	Type           string                `json:"type,omitempty"`
-	Username       string                `json:"username,omitempty"`
-	UserKey        string                `json:"userKey,omitempty"`
-	AccountID      string                `json:"accountId,omitempty"`
-	AccountType    string                `json:"accountType,omitempty"`
-	Email          string                `json:"email,omitempty"`
-	PublicName     string                `json:"publicName,omitempty"`
-	ProfilePicture *ProfilePictureScheme `json:"profilePicture,omitempty"`
-	DisplayName    string                `json:"displayName,omitempty"`
-	Operations     []*OperationScheme    `json:"operations,omitempty"`
-	Details        *UserDetailScheme     `json:"details,omitempty"`
-	PersonalSpace  *SpaceScheme          `json:"personalSpace,omitempty"`
-	Expandable     *ExpandableScheme     `json:"_expandable,omitempty"`
-	Links          *LinkScheme           `json:"_links,omitempty"`
-}
-
-type ProfilePictureScheme struct {
-	Path      string `json:"path,omitempty"`
-	Width     int    `json:"width,omitempty"`
-	Height    int    `json:"height,omitempty"`
-	IsDefault bool   `json:"isDefault,omitempty"`
-}
-
-type UserDetailScheme struct {
-	Business *UserBusinessDetailScheme `json:"business,omitempty"`
-	Personal *UserPersonalDetailScheme `json:"personal,omitempty"`
-}
-
-type UserBusinessDetailScheme struct {
-	Position   string `json:"position,omitempty"`
-	Department string `json:"department,omitempty"`
-	Location   string `json:"location,omitempty"`
-}
-
-type UserPersonalDetailScheme struct {
-	Phone   string `json:"phone,omitempty"`
-	Im      string `json:"im,omitempty"`
-	Website string `json:"website,omitempty"`
-	Email   string `json:"email,omitempty"`
-}
-
 // History returns the most recent update for a piece of content.
-func (c *ContentService) History(ctx context.Context, contentID string, expand []string) (result *ContentHistoryScheme, response *ResponseScheme, err error) {
+func (c *ContentService) History(ctx context.Context, contentID string, expand []string) (result *model.ContentHistoryScheme,
+	response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, nil, notContentIDError
+		return nil, nil, model.ErrNoContentIDError
 	}
 
 	query := url.Values{}
@@ -511,8 +296,3 @@ func (c *ContentService) History(ctx context.Context, contentID string, expand [
 
 	return
 }
-
-var (
-	notCqlProvidedError = fmt.Errorf("error, cql parameter is required, please provide a valid value")
-	notContentIDError   = fmt.Errorf("error, the content ID is required, please provide a valid value")
-)
diff --git a/confluence/contentAttachments.go b/confluence/contentAttachments.go
index f7a11ff..60a4d62 100644
--- a/confluence/contentAttachments.go
+++ b/confluence/contentAttachments.go
@@ -4,6 +4,7 @@ import (
 	"bytes"
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"io"
 	"mime/multipart"
 	"net/http"
@@ -16,18 +17,13 @@ type ContentAttachmentService struct {
 	client *Client
 }
 
-type GetContentAttachmentsOptionsScheme struct {
-	Expand    []string
-	FileName  string
-	MediaType string
-}
-
 // Gets returns the attachments for a piece of content.
 // By default, the following objects are expanded: metadata.
-func (c *ContentAttachmentService) Gets(ctx context.Context, contentID string, startAt, maxResults int, options *GetContentAttachmentsOptionsScheme) (result *ContentPageScheme, response *ResponseScheme, err error) {
+func (c *ContentAttachmentService) Gets(ctx context.Context, contentID string, startAt, maxResults int,
+	options *model.GetContentAttachmentsOptionsScheme) (result *model.ContentPageScheme, response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, nil, notContentIDError
+		return nil, nil, model.ErrNoContentIDError
 	}
 
 	query := url.Values{}
@@ -70,7 +66,8 @@ func (c *ContentAttachmentService) Gets(ctx context.Context, contentID string, s
 // CreateOrUpdate adds an attachment to a piece of content.
 // If the attachment already exists for the content,
 // then the attachment is updated (i.e. a new version of the attachment is created).
-func (c *ContentAttachmentService) CreateOrUpdate(ctx context.Context, attachmentID, status, fileName string, file io.Reader) (result *ContentPageScheme, response *ResponseScheme, err error) {
+func (c *ContentAttachmentService) CreateOrUpdate(ctx context.Context, attachmentID, status, fileName string, file io.Reader) (
+	result *model.ContentPageScheme, response *ResponseScheme, err error) {
 
 	if len(attachmentID) == 0 {
 		return nil, nil, notAttachmentIDError
@@ -132,7 +129,8 @@ func (c *ContentAttachmentService) CreateOrUpdate(ctx context.Context, attachmen
 // Create adds an attachment to a piece of content.
 // This method only adds a new attachment.
 // If you want to update an existing attachment, use Create or update attachments.
-func (c *ContentAttachmentService) Create(ctx context.Context, attachmentID, status, fileName string, file io.Reader) (result *ContentPageScheme, response *ResponseScheme, err error) {
+func (c *ContentAttachmentService) Create(ctx context.Context, attachmentID, status, fileName string, file io.Reader) (
+	result *model.ContentPageScheme, response *ResponseScheme, err error) {
 
 	if len(attachmentID) == 0 {
 		return nil, nil, notAttachmentIDError
diff --git a/confluence/contentChildrenDescendants.go b/confluence/contentChildrenDescendants.go
index 9d5fb8a..0516714 100644
--- a/confluence/contentChildrenDescendants.go
+++ b/confluence/contentChildrenDescendants.go
@@ -3,6 +3,7 @@ package confluence
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"net/http"
 	"net/url"
 	"strconv"
@@ -21,10 +22,10 @@ type ContentChildrenDescendantService struct {
 // attachment: child content is comment
 // comment: child content is attachment
 func (c *ContentChildrenDescendantService) Children(ctx context.Context, contentID string, expand []string,
-	parentVersion int) (result *ContentChildrenScheme, response *ResponseScheme, err error) {
+	parentVersion int) (result *model.ContentChildrenScheme, response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, nil, notContentIDError
+		return nil, nil, model.ErrNoContentIDError
 	}
 
 	query := url.Values{}
@@ -58,28 +59,21 @@ func (c *ContentChildrenDescendantService) Children(ctx context.Context, content
 	return
 }
 
-type ContentChildrenScheme struct {
-	Attachment *ContentPageScheme `json:"attachment,omitempty"`
-	Comments   *ContentPageScheme `json:"comment,omitempty"`
-	Page       *ContentPageScheme `json:"page,omitempty"`
-	Links      *LinkScheme        `json:"_links,omitempty"`
-}
-
 // ChildrenByType returns all children of a given type, for a piece of content.
 // A piece of content has different types of child content
 func (c *ContentChildrenDescendantService) ChildrenByType(ctx context.Context, contentID, contentType string,
-	parentVersion int, expand []string, startAt, maxResults int) (result *ContentPageScheme, response *ResponseScheme, err error) {
+	parentVersion int, expand []string, startAt, maxResults int) (result *model.ContentPageScheme, response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, nil, notContentIDError
+		return nil, nil, model.ErrNoContentIDError
 	}
 
 	if len(contentType) == 0 {
-		return nil, nil, notContentTypeError
+		return nil, nil, model.ErrNoContentTypeError
 	}
 
 	var hasValidValue bool
-	for _, value := range validContentTypes {
+	for _, value := range model.ValidContentTypes {
 
 		if value == contentType {
 			hasValidValue = true
@@ -88,7 +82,7 @@ func (c *ContentChildrenDescendantService) ChildrenByType(ctx context.Context, c
 	}
 
 	if !hasValidValue {
-		return nil, nil, invalidContentTypeError
+		return nil, nil, model.ErrInvalidContentTypeError
 	}
 
 	query := url.Values{}
@@ -124,10 +118,10 @@ func (c *ContentChildrenDescendantService) ChildrenByType(ctx context.Context, c
 // This is similar to Get content children, except that this method returns child pages at all levels,
 // rather than just the direct child pages.
 func (c *ContentChildrenDescendantService) Descendants(ctx context.Context, contentID string, expand []string,
-) (result *ContentChildrenScheme, response *ResponseScheme, err error) {
+) (result *model.ContentChildrenScheme, response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, nil, notContentIDError
+		return nil, nil, model.ErrNoContentIDError
 	}
 
 	query := url.Values{}
@@ -161,18 +155,18 @@ func (c *ContentChildrenDescendantService) Descendants(ctx context.Context, cont
 // This is similar to Get content children by type,
 // except that this method returns child pages at all levels, rather than just the direct child pages.
 func (c *ContentChildrenDescendantService) DescendantsByType(ctx context.Context, contentID, contentType,
-	depth string, expand []string, startAt, maxResults int) (result *ContentPageScheme, response *ResponseScheme, err error) {
+	depth string, expand []string, startAt, maxResults int) (result *model.ContentPageScheme, response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, nil, notContentIDError
+		return nil, nil, model.ErrNoContentIDError
 	}
 
 	if len(contentType) == 0 {
-		return nil, nil, notContentTypeError
+		return nil, nil, model.ErrNoContentTypeError
 	}
 
 	var hasValidValue bool
-	for _, value := range validContentTypes {
+	for _, value := range model.ValidContentTypes {
 
 		if value == contentType {
 			hasValidValue = true
@@ -181,7 +175,7 @@ func (c *ContentChildrenDescendantService) DescendantsByType(ctx context.Context
 	}
 
 	if !hasValidValue {
-		return nil, nil, invalidContentTypeError
+		return nil, nil, model.ErrInvalidContentTypeError
 	}
 
 	query := url.Values{}
@@ -213,44 +207,6 @@ func (c *ContentChildrenDescendantService) DescendantsByType(ctx context.Context
 	return
 }
 
-type CopyOptionsScheme struct {
-	CopyAttachments    bool                       `json:"copyAttachments,omitempty"`
-	CopyPermissions    bool                       `json:"copyPermissions,omitempty"`
-	CopyProperties     bool                       `json:"copyProperties,omitempty"`
-	CopyLabels         bool                       `json:"copyLabels,omitempty"`
-	CopyCustomContents bool                       `json:"copyCustomContents,omitempty"`
-	DestinationPageID  string                     `json:"destinationPageId,omitempty"`
-	TitleOptions       *CopyTitleOptionScheme     `json:"titleOptions,omitempty"`
-	Destination        *CopyPageDestinationScheme `json:"destination,omitempty"`
-	PageTitle          string                     `json:"pageTitle,omitempty"`
-	Body               *CopyPageBodyScheme        `json:"body,omitempty"`
-}
-
-type CopyTitleOptionScheme struct {
-	Prefix  string `json:"prefix,omitempty"`
-	Replace string `json:"replace,omitempty"`
-	Search  string `json:"search,omitempty"`
-}
-
-type CopyPageDestinationScheme struct {
-	Type  string `json:"type,omitempty"`
-	Value string `json:"value,omitempty"`
-}
-
-type CopyPageBodyScheme struct {
-	Storage *BodyNodeScheme `json:"storage"`
-	Editor2 *BodyNodeScheme `json:"editor2"`
-}
-
-type TaskScheme struct {
-	ID    string          `json:"id,omitempty"`
-	Links *TaskLinkScheme `json:"links,omitempty"`
-}
-
-type TaskLinkScheme struct {
-	Status string `json:"status"`
-}
-
 // CopyHierarchy copy page hierarchy allows the copying of an entire hierarchy of pages and their associated properties,
 // permissions and attachments. The id path parameter refers to the content id of the page to copy,
 // and the new parent of this copied page is defined using the destinationPageId in the request body.
@@ -258,10 +214,10 @@ type TaskLinkScheme struct {
 // for example, search and replace can be used in conjunction to rewrite the copied page titles.
 // RESPONSE =  Use the /longtask/ REST API to get the copy task status.
 func (c *ContentChildrenDescendantService) CopyHierarchy(ctx context.Context, contentID string,
-	options *CopyOptionsScheme) (result *TaskScheme, response *ResponseScheme, err error) {
+	options *model.CopyOptionsScheme) (result *model.TaskScheme, response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, nil, notContentIDError
+		return nil, nil, model.ErrNoContentIDError
 	}
 
 	payloadAsReader, err := transformStructToReader(options)
@@ -294,10 +250,10 @@ func (c *ContentChildrenDescendantService) CopyHierarchy(ctx context.Context, co
 // 3. existing_page: page will be copied and replace the specified page
 // By default, the following objects are expanded: space, history, version.
 func (c *ContentChildrenDescendantService) CopyPage(ctx context.Context, contentID string, expand []string,
-	options *CopyOptionsScheme) (result *ContentScheme, response *ResponseScheme, err error) {
+	options *model.CopyOptionsScheme) (result *model.ContentScheme, response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, nil, notContentIDError
+		return nil, nil, model.ErrNoContentIDError
 	}
 
 	query := url.Values{}
@@ -332,11 +288,3 @@ func (c *ContentChildrenDescendantService) CopyPage(ctx context.Context, content
 
 	return
 }
-
-var (
-	notContentTypeError     = fmt.Errorf("error, the content type is required, please provide a valid value")
-	invalidContentTypeError = fmt.Errorf("error, the content type provided is not valid, please provide one of "+
-		"the following options: %v", strings.Join(validContentTypes, ","))
-
-	validContentTypes = []string{"page", "comment", "attachment"}
-)
diff --git a/confluence/contentComment.go b/confluence/contentComment.go
index e9caae2..e1d6f6a 100644
--- a/confluence/contentComment.go
+++ b/confluence/contentComment.go
@@ -3,6 +3,7 @@ package confluence
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"net/http"
 	"net/url"
 	"strconv"
@@ -15,10 +16,10 @@ type ContentCommentService struct {
 
 // Gets returns the comments on a piece of content.
 func (c *ContentCommentService) Gets(ctx context.Context, contentID string, expand, location []string,
-	startAt, maxResults int) (result *ContentPageScheme, response *ResponseScheme, err error) {
+	startAt, maxResults int) (result *model.ContentPageScheme, response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, nil, notContentIDError
+		return nil, nil, model.ErrNoContentIDError
 	}
 
 	query := url.Values{}
diff --git a/confluence/contentLabels.go b/confluence/contentLabels.go
index 5915b09..8bcf965 100644
--- a/confluence/contentLabels.go
+++ b/confluence/contentLabels.go
@@ -3,6 +3,7 @@ package confluence
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"net/http"
 	"net/url"
 	"strconv"
@@ -15,11 +16,11 @@ type ContentLabelService struct {
 
 // Gets returns the labels on a piece of content.
 // Atlassian Docs: https://developer.atlassian.com/cloud/confluence/rest/api-group-content-labels/#api-wiki-rest-api-content-id-label-get
-func (c *ContentLabelService) Gets(ctx context.Context, contentID, prefix string, startAt, maxResults int) (result *ContentLabelPageScheme,
+func (c *ContentLabelService) Gets(ctx context.Context, contentID, prefix string, startAt, maxResults int) (result *model.ContentLabelPageScheme,
 	response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, nil, notContentIDError
+		return nil, nil, model.ErrNoCQLError
 	}
 
 	query := url.Values{}
@@ -49,11 +50,11 @@ func (c *ContentLabelService) Gets(ctx context.Context, contentID, prefix string
 
 // Add adds labels to a piece of content. Does not modify the existing labels.
 // Atlassian Docs: https://developer.atlassian.com/cloud/confluence/rest/api-group-content-labels/#api-wiki-rest-api-content-id-label-post
-func (c *ContentLabelService) Add(ctx context.Context, contentID string, payload []*ContentLabelPayloadScheme, want400Response bool) (
-	result *ContentLabelPageScheme, response *ResponseScheme, err error) {
+func (c *ContentLabelService) Add(ctx context.Context, contentID string, payload []*model.ContentLabelPayloadScheme, want400Response bool) (
+	result *model.ContentLabelPageScheme, response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, nil, notContentIDError
+		return nil, nil, model.ErrNoCQLError
 	}
 
 	payloadAsReader, err := transformStructToReader(payload)
@@ -94,11 +95,11 @@ func (c *ContentLabelService) Add(ctx context.Context, contentID string, payload
 func (c *ContentLabelService) Remove(ctx context.Context, contentID, labelName string) (response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, notContentIDError
+		return nil, model.ErrNoCQLError
 	}
 
 	if len(labelName) == 0 {
-		return nil, notLabelNameError
+		return nil, model.ErrNoContentLabelError
 	}
 
 	var endpoint = fmt.Sprintf("/wiki/rest/api/content/%v/label/%v", contentID, labelName)
@@ -115,26 +116,3 @@ func (c *ContentLabelService) Remove(ctx context.Context, contentID, labelName s
 
 	return
 }
-
-type ContentLabelPayloadScheme struct {
-	Prefix string `json:"prefix"`
-	Name   string `json:"name"`
-}
-
-type ContentLabelPageScheme struct {
-	Results []*ContentLabelScheme `json:"results,omitempty"`
-	Start   int                   `json:"start,omitempty"`
-	Limit   int                   `json:"limit,omitempty"`
-	Size    int                   `json:"size,omitempty"`
-}
-
-type ContentLabelScheme struct {
-	Prefix string `json:"prefix,omitempty"`
-	Name   string `json:"name,omitempty"`
-	ID     string `json:"id,omitempty"`
-	Label  string `json:"label,omitempty"`
-}
-
-var (
-	notLabelNameError = fmt.Errorf("error!, please provide a label name")
-)
diff --git a/confluence/contentPermission.go b/confluence/contentPermission.go
index 218475b..e9f1564 100644
--- a/confluence/contentPermission.go
+++ b/confluence/contentPermission.go
@@ -3,6 +3,7 @@ package confluence
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"net/http"
 )
 
@@ -10,16 +11,6 @@ type ContentPermissionService struct {
 	client *Client
 }
 
-type CheckPermissionScheme struct {
-	Subject   *PermissionSubjectScheme `json:"subject,omitempty"`
-	Operation string                   `json:"operation,omitempty"`
-}
-
-type PermissionSubjectScheme struct {
-	Type       string `json:"type"`
-	Identifier string `json:"identifier"`
-}
-
 // Check if a user or a group can perform an operation to the specified content.
 // The operation to check must be provided.
 // The user’s account ID or the ID of the group can be provided in the subject to check permissions
@@ -29,10 +20,10 @@ type PermissionSubjectScheme struct {
 // 2. space permissions
 // 3. content restrictions
 func (c *ContentPermissionService) Check(ctx context.Context, contentID string,
-	payload *CheckPermissionScheme) (result *PermissionCheckResponseScheme, response *ResponseScheme, err error) {
+	payload *model.CheckPermissionScheme) (result *model.PermissionCheckResponseScheme, response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, nil, notContentIDError
+		return nil, nil, model.ErrNoContentIDError
 	}
 
 	var endpoint = fmt.Sprintf("/wiki/rest/api/content/%v/permission/check", contentID)
@@ -57,14 +48,3 @@ func (c *ContentPermissionService) Check(ctx context.Context, contentID string,
 
 	return
 }
-
-type PermissionCheckResponseScheme struct {
-	HasPermission bool                            `json:"hasPermission"`
-	Errors        []*PermissionCheckMessageScheme `json:"errors,omitempty"`
-}
-
-type PermissionCheckMessageScheme struct {
-	Translation string `json:"translation"`
-	Args        []struct {
-	} `json:"args"`
-}
diff --git a/confluence/contentProperties.go b/confluence/contentProperties.go
index bbc8b0d..8c3fecf 100644
--- a/confluence/contentProperties.go
+++ b/confluence/contentProperties.go
@@ -3,6 +3,7 @@ package confluence
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"net/http"
 	"net/url"
 	"strconv"
@@ -14,10 +15,10 @@ type ContentPropertyService struct{ client *Client }
 // Gets returns the properties for a piece of content.
 // Atlassian Docs: https://developer.atlassian.com/cloud/confluence/rest/api-group-content-properties/#api-wiki-rest-api-content-id-property-get
 func (c *ContentPropertyService) Gets(ctx context.Context, contentID string, expand []string, startAt, maxResults int) (
-	result *ContentPropertyPageScheme, response *ResponseScheme, err error) {
+	result *model.ContentPropertyPageScheme, response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, nil, notContentIDError
+		return nil, nil, model.ErrNoContentIDError
 	}
 
 	query := url.Values{}
@@ -47,11 +48,11 @@ func (c *ContentPropertyService) Gets(ctx context.Context, contentID string, exp
 
 // Create creates a property for an existing piece of content.
 // Atlassian Docs: https://developer.atlassian.com/cloud/confluence/rest/api-group-content-properties/#api-wiki-rest-api-content-id-property-post
-func (c *ContentPropertyService) Create(ctx context.Context, contentID string, payload *ContentPropertyPayloadScheme) (
-	result *ContentPropertyScheme, response *ResponseScheme, err error) {
+func (c *ContentPropertyService) Create(ctx context.Context, contentID string, payload *model.ContentPropertyPayloadScheme) (
+	result *model.ContentPropertyScheme, response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, nil, notContentIDError
+		return nil, nil, model.ErrNoContentIDError
 	}
 
 	payloadAsReader, err := transformStructToReader(payload)
@@ -79,15 +80,15 @@ func (c *ContentPropertyService) Create(ctx context.Context, contentID string, p
 
 // Get returns a content property for a piece of content.
 // Atlassian Docs: https://developer.atlassian.com/cloud/confluence/rest/api-group-content-properties/#api-wiki-rest-api-content-id-property-key-get
-func (c *ContentPropertyService) Get(ctx context.Context, contentID, key string) (result *ContentPropertyScheme,
+func (c *ContentPropertyService) Get(ctx context.Context, contentID, key string) (result *model.ContentPropertyScheme,
 	response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, nil, notContentIDError
+		return nil, nil, model.ErrNoContentIDError
 	}
 
 	if len(key) == 0 {
-		return nil, nil, notPropertyKeyError
+		return nil, nil, model.ErrNoContentPropertyError
 	}
 
 	var endpoint = fmt.Sprintf("/wiki/rest/api/content/%v/property/%v", contentID, key)
@@ -112,11 +113,11 @@ func (c *ContentPropertyService) Get(ctx context.Context, contentID, key string)
 func (c *ContentPropertyService) Delete(ctx context.Context, contentID, key string) (response *ResponseScheme, err error) {
 
 	if len(contentID) == 0 {
-		return nil, notContentIDError
+		return nil, model.ErrNoContentIDError
 	}
 
 	if len(key) == 0 {
-		return nil, notPropertyKeyError
+		return nil, model.ErrNoContentPropertyError
 	}
 
 	var endpoint = fmt.Sprintf("/wiki/rest/api/content/%v/property/%v", contentID, key)
@@ -133,38 +134,3 @@ func (c *ContentPropertyService) Delete(ctx context.Context, contentID, key stri
 
 	return
 }
-
-type ContentPropertyPayloadScheme struct {
-	Key   string `json:"key"`
-	Value string `json:"value"`
-}
-
-type ContentPropertyPageScheme struct {
-	Results []*ContentPropertyScheme `json:"results,omitempty"`
-	Start   int                      `json:"start,omitempty"`
-	Limit   int                      `json:"limit,omitempty"`
-	Size    int                      `json:"size,omitempty"`
-}
-
-type ContentPropertyScheme struct {
-	ID         string                        `json:"id,omitempty"`
-	Key        string                        `json:"key,omitempty"`
-	Value      interface{}                   `json:"value,omitempty"`
-	Version    *ContentPropertyVersionScheme `json:"version,omitempty"`
-	Expandable struct {
-		Content              string `json:"content,omitempty"`
-		AdditionalProperties string `json:"additionalProperties,omitempty"`
-	} `json:"_expandable,omitempty"`
-}
-
-type ContentPropertyVersionScheme struct {
-	When                string `json:"when,omitempty"`
-	Message             string `json:"message,omitempty"`
-	Number              int    `json:"number,omitempty"`
-	MinorEdit           bool   `json:"minorEdit,omitempty"`
-	ContentTypeModified bool   `json:"contentTypeModified,omitempty"`
-}
-
-var (
-	notPropertyKeyError = fmt.Errorf("error!, please provide a valid property key")
-)
diff --git a/confluence/examples/childrenDescendant/childrenByType/childrenByType.go b/confluence/examples/childrenDescendant/childrenByType/childrenByType.go
deleted file mode 100644
index 4ad05f3..0000000
--- a/confluence/examples/childrenDescendant/childrenByType/childrenByType.go
+++ /dev/null
@@ -1,53 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		contentID     = "76513281"
-		contentType   = "page"
-		expand        = []string{"childTypes.all"}
-		parentVersion = 0
-		starAt        = 0
-		maxResult     = 50
-	)
-
-	contents, response, err := instance.Content.ChildrenDescendant.ChildrenByType(context.Background(), contentID, contentType,
-		parentVersion, expand, starAt, maxResult)
-
-	if err != nil {
-
-		if response != nil {
-			log.Println(response.API)
-		}
-
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-
-	for _, content := range contents.Results {
-		log.Println(content.Type, content.Title, content.ID)
-	}
-}
diff --git a/confluence/examples/childrenDescendant/copyHierarchy/copyHierarchy.go b/confluence/examples/childrenDescendant/copyHierarchy/copyHierarchy.go
deleted file mode 100644
index aef7f79..0000000
--- a/confluence/examples/childrenDescendant/copyHierarchy/copyHierarchy.go
+++ /dev/null
@@ -1,57 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		contentID = "76513281"
-		options   = &confluence.CopyOptionsScheme{
-			CopyAttachments:    true,
-			CopyPermissions:    true,
-			CopyProperties:     true,
-			CopyLabels:         true,
-			CopyCustomContents: true,
-			DestinationPageID:  "80412692",
-			TitleOptions: &confluence.CopyTitleOptionScheme{
-				Prefix: "copy-01-",
-			},
-		}
-	)
-
-	task, response, err := instance.Content.ChildrenDescendant.CopyHierarchy(context.Background(), contentID, options)
-	if err != nil {
-
-		if response != nil {
-			log.Println(response.API)
-		}
-
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-
-	log.Println(task.ID)
-	log.Println(task.Links.Status)
-
-}
diff --git a/confluence/examples/childrenDescendant/copyPage/copyPage.go b/confluence/examples/childrenDescendant/copyPage/copyPage.go
deleted file mode 100644
index 656256b..0000000
--- a/confluence/examples/childrenDescendant/copyPage/copyPage.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		contentID = "76513281"
-		options   = &confluence.CopyOptionsScheme{
-			CopyAttachments:    true,
-			CopyPermissions:    true,
-			CopyProperties:     true,
-			CopyLabels:         true,
-			CopyCustomContents: true,
-			PageTitle:          "new-page-copied-title",
-			Destination: &confluence.CopyPageDestinationScheme{
-				Type:  "parent_page",
-				Value: "64290817",
-			},
-		}
-	)
-
-	content, response, err := instance.Content.ChildrenDescendant.CopyPage(context.Background(), contentID, nil, options)
-	if err != nil {
-
-		if response != nil {
-			log.Println(response.API)
-		}
-
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-	log.Println(content.Type, content.ID, content.Title)
-
-}
diff --git a/confluence/examples/childrenDescendant/descendants/descendants.go b/confluence/examples/childrenDescendant/descendants/descendants.go
deleted file mode 100644
index c17f196..0000000
--- a/confluence/examples/childrenDescendant/descendants/descendants.go
+++ /dev/null
@@ -1,62 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		contentID = "76513281"
-		expand    = []string{"page", "comments", "attachment"}
-	)
-
-	contents, response, err := instance.Content.ChildrenDescendant.Descendants(context.Background(), contentID, expand)
-	if err != nil {
-
-		if response != nil {
-			log.Println(response.API)
-		}
-
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-
-	if contents.Attachment != nil {
-		for _, attachment := range contents.Attachment.Results {
-			log.Println(attachment.Type, attachment.Title)
-		}
-	}
-
-	if contents.Comments != nil {
-		for _, comment := range contents.Comments.Results {
-			log.Println(comment.Type, comment.Title)
-		}
-	}
-
-	if contents.Page != nil {
-		for _, page := range contents.Page.Results {
-			log.Println(page.Type, page.Title)
-		}
-	}
-
-}
diff --git a/confluence/examples/childrenDescendant/descendantsByType/descendantsByType.go b/confluence/examples/childrenDescendant/descendantsByType/descendantsByType.go
deleted file mode 100644
index 6ac8011..0000000
--- a/confluence/examples/childrenDescendant/descendantsByType/descendantsByType.go
+++ /dev/null
@@ -1,54 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		contentID   = "76513281"
-		contentType = "page"
-		expand      = []string{"childTypes.all"}
-		depth       = "1"
-		starAt      = 0
-		maxResult   = 50
-	)
-
-	contents, response, err := instance.Content.ChildrenDescendant.DescendantsByType(context.Background(), contentID, contentType,
-		depth, expand, starAt, maxResult)
-
-	if err != nil {
-
-		if response != nil {
-			log.Println(response.API)
-		}
-
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-
-	for _, content := range contents.Results {
-		log.Println(content.Type, content.Title, content.ID)
-	}
-
-}
diff --git a/confluence/examples/childrenDescendant/getChildren/getChildren.go b/confluence/examples/childrenDescendant/getChildren/getChildren.go
deleted file mode 100644
index c0f6ffc..0000000
--- a/confluence/examples/childrenDescendant/getChildren/getChildren.go
+++ /dev/null
@@ -1,62 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		contentID = "76513281"
-		expand    = []string{"page", "comments", "attachment"}
-	)
-
-	contents, response, err := instance.Content.ChildrenDescendant.Children(context.Background(), contentID, expand, 0)
-	if err != nil {
-
-		if response != nil {
-			log.Println(response.API)
-		}
-
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-
-	if contents.Attachment != nil {
-		for _, attachment := range contents.Attachment.Results {
-			log.Println(attachment.Type, attachment.Title)
-		}
-	}
-
-	if contents.Comments != nil {
-		for _, comment := range contents.Comments.Results {
-			log.Println(comment.Type, comment.Title)
-		}
-	}
-
-	if contents.Page != nil {
-		for _, page := range contents.Page.Results {
-			log.Println(page.Type, page.Title)
-		}
-	}
-
-}
diff --git a/confluence/examples/content/create/create.go b/confluence/examples/content/create/create.go
deleted file mode 100644
index 0b77a23..0000000
--- a/confluence/examples/content/create/create.go
+++ /dev/null
@@ -1,60 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var payload = &confluence.ContentScheme{
-		Type:  "page", // Valid values: page, blogpost, comment
-		Title: "Confluence Page Title",
-		Space: &confluence.SpaceScheme{Key: "DUMMY"},
-		Body: &confluence.BodyScheme{
-			Storage: &confluence.BodyNodeScheme{
-				Value:          "<p>This is <br/> a new page</p>",
-				Representation: "storage",
-			},
-		},
-		Ancestors: []*confluence.ContentScheme{
-			{
-				ID: "78643265",
-			},
-		},
-	}
-
-	newConfluence, response, err := instance.Content.Create(context.Background(), payload)
-	if err != nil {
-
-		if response != nil {
-			log.Fatal(response.API)
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-
-	log.Println("The new content has been created")
-	log.Println(newConfluence.ID)
-	log.Println(newConfluence.Links.Self)
-	log.Println(newConfluence.Title)
-	log.Println(newConfluence.Space.Name)
-}
diff --git a/confluence/examples/content/delete/delete.go b/confluence/examples/content/delete/delete.go
deleted file mode 100644
index e2f7375..0000000
--- a/confluence/examples/content/delete/delete.go
+++ /dev/null
@@ -1,41 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var contentID = "74219528"
-
-	response, err := instance.Content.Delete(context.Background(), contentID, "")
-	if err != nil {
-
-		if response != nil {
-			log.Println(response.API)
-			log.Println(response)
-		}
-
-		log.Fatal(err)
-	}
-
-	log.Println(response)
-
-}
diff --git a/confluence/examples/content/get/get.go b/confluence/examples/content/get/get.go
deleted file mode 100644
index d0a4bf4..0000000
--- a/confluence/examples/content/get/get.go
+++ /dev/null
@@ -1,49 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		contentID = "78643301"
-		expand    = []string{"any", "ancestors"}
-		version   = 1
-	)
-
-	content, response, err := instance.Content.Get(context.Background(), contentID, expand, version)
-	if err != nil {
-
-		if response != nil {
-			log.Println(response.API)
-		}
-
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-	log.Println(content)
-
-	for index, ancestors := range content.Ancestors {
-		log.Println(index, ancestors.Title)
-	}
-}
diff --git a/confluence/examples/content/gets/get.go b/confluence/examples/content/gets/get.go
deleted file mode 100644
index d67bc45..0000000
--- a/confluence/examples/content/gets/get.go
+++ /dev/null
@@ -1,81 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	options := &confluence.GetContentOptionsScheme{
-		//ContextType: "page",
-		SpaceKey: "",
-		Title:    "",
-		Trigger:  "",
-		OrderBy:  "",
-		//Status:      []string{"any", "any"},
-		Expand: []string{"childTypes.all", "operations"},
-		//PostingDay:  time.Now(),
-	}
-
-	page, response, err := instance.Content.Gets(context.Background(), options, 0, 50)
-	if err != nil {
-
-		if response.Code == http.StatusBadRequest {
-			log.Println(response.API)
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-
-	for _, content := range page.Results {
-
-		if content.ChildTypes != nil {
-			log.Println("- Content ChildTypes -")
-			log.Println(content.ChildTypes.Attachment.Links.Self)
-			log.Println(content.ChildTypes.Comment.Links.Self)
-			log.Println(content.ChildTypes.Page.Links.Self)
-		}
-
-		if content.Space != nil {
-			log.Println("- Space -")
-			log.Println(content.Space)
-		}
-
-		if content.Metadata != nil && content.Metadata.Labels != nil {
-			log.Println("- Content Labels -")
-
-			for _, result := range content.Metadata.Labels.Results {
-				log.Println(result)
-			}
-		}
-
-		if content.Operations != nil {
-			log.Println("- Operations -")
-			for _, operation := range content.Operations {
-				log.Println(operation)
-			}
-		}
-
-		log.Println("--------------------------------------")
-	}
-}
diff --git a/confluence/examples/content/history/history.go b/confluence/examples/content/history/history.go
deleted file mode 100644
index 7b9a90c..0000000
--- a/confluence/examples/content/history/history.go
+++ /dev/null
@@ -1,44 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		contentID = "76513281"
-		expand    = []string{"lastUpdated", "previousVersion"}
-	)
-
-	contentHistory, response, err := instance.Content.History(context.Background(), contentID, expand)
-	if err != nil {
-
-		if response != nil {
-			log.Println(response.API)
-		}
-
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-	log.Println(contentHistory)
-}
diff --git a/confluence/examples/content/search/search.go b/confluence/examples/content/search/search.go
deleted file mode 100644
index d31935d..0000000
--- a/confluence/examples/content/search/search.go
+++ /dev/null
@@ -1,50 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		cql        = "type=page"
-		cqlContext = ""
-		expand     = []string{"childTypes.all", "metadata.labels"}
-		maxResults = 50
-	)
-
-	contentPage, response, err := instance.Content.Search(context.Background(), cql, cqlContext, expand, "", maxResults)
-	if err != nil {
-
-		if response.Code == http.StatusBadRequest {
-			log.Println(response.API)
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-	log.Println(contentPage.Links.Next)
-
-	for _, content := range contentPage.Results {
-		log.Println(content.Title, content.ID)
-	}
-}
diff --git a/confluence/examples/content/update/update.go b/confluence/examples/content/update/update.go
deleted file mode 100644
index 4af58ce..0000000
--- a/confluence/examples/content/update/update.go
+++ /dev/null
@@ -1,51 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var payload = &confluence.ContentScheme{
-		Type:  "page", // Valid values: page, blogpost, comment
-		Title: "Confluence Page Title - Updated",
-		Body: &confluence.BodyScheme{
-			Storage: &confluence.BodyNodeScheme{
-				Value:          "<p>This is <br/> a new page - updated</p>",
-				Representation: "storage",
-			},
-		},
-		Version: &confluence.VersionScheme{Number: 2},
-	}
-
-	content, response, err := instance.Content.Update(context.Background(), "64290828", payload)
-	if err != nil {
-
-		if response != nil {
-			log.Println(response.API)
-		}
-
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-	log.Println(content)
-}
diff --git a/confluence/examples/contentAttachments/create/create.go b/confluence/examples/contentAttachments/create/create.go
deleted file mode 100644
index 7d85f85..0000000
--- a/confluence/examples/contentAttachments/create/create.go
+++ /dev/null
@@ -1,66 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-	"path/filepath"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	absolutePath, err := filepath.Abs("confluence/mocks/mock.png")
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	log.Println("Using the path", absolutePath)
-
-	reader, err := os.Open(absolutePath)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	defer reader.Close()
-
-	var (
-		attachmentID = "76513281"
-		fileName     = "mock-00.png"
-	)
-
-	attachmentsPage, response, err := instance.Content.Attachment.Create(context.Background(), attachmentID, "", fileName, reader)
-	if err != nil {
-
-		if response != nil {
-			if response.Code == http.StatusBadRequest {
-				log.Println(response.API)
-			}
-		}
-		log.Println(response.Endpoint)
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-
-	for _, attachment := range attachmentsPage.Results {
-		log.Println(attachment.ID, attachment.Title)
-	}
-
-}
diff --git a/confluence/examples/contentAttachments/createOrUpdate/createOrUpdate.go b/confluence/examples/contentAttachments/createOrUpdate/createOrUpdate.go
deleted file mode 100644
index 5a92aab..0000000
--- a/confluence/examples/contentAttachments/createOrUpdate/createOrUpdate.go
+++ /dev/null
@@ -1,67 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-	"path/filepath"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	//filepath.Abs("jira/mocks/image.png")
-
-	absolutePath, err := filepath.Abs("confluence/mocks/mock.png")
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	log.Println("Using the path", absolutePath)
-
-	reader, err := os.Open(absolutePath)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	defer reader.Close()
-
-	var (
-		attachmentID = "76513281"
-		fileName     = "mock.png"
-	)
-
-	attachmentsPage, response, err := instance.Content.Attachment.CreateOrUpdate(context.Background(), attachmentID, "", fileName, reader)
-	if err != nil {
-
-		if response != nil {
-			if response.Code == http.StatusBadRequest {
-				log.Println(response.API)
-			}
-		}
-		log.Println(response.Endpoint)
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-
-	for _, attachment := range attachmentsPage.Results {
-		log.Println(attachment.ID, attachment.Title)
-	}
-}
diff --git a/confluence/examples/contentAttachments/gets/gets.go b/confluence/examples/contentAttachments/gets/gets.go
deleted file mode 100644
index d6cd894..0000000
--- a/confluence/examples/contentAttachments/gets/gets.go
+++ /dev/null
@@ -1,50 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var options = &confluence.GetContentAttachmentsOptionsScheme{
-		Expand:    nil,
-		FileName:  "",
-		MediaType: "",
-	}
-
-	attachments, response, err := instance.Content.Attachment.Gets(context.Background(), "76513281", 0, 50, options)
-	if err != nil {
-
-		if response != nil {
-			if response.Code == http.StatusBadRequest {
-				log.Println(response.API)
-			}
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-
-	for _, attachment := range attachments.Results {
-		log.Println(attachment.Metadata.MediaType, attachment.Title)
-	}
-}
diff --git a/confluence/examples/contentComment/gets/gets.go b/confluence/examples/contentComment/gets/gets.go
deleted file mode 100644
index f856a30..0000000
--- a/confluence/examples/contentComment/gets/gets.go
+++ /dev/null
@@ -1,53 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		contentID  = "76513281"
-		expand     = []string{"childTypes.all"}
-		startAt    = 0
-		maxResults = 50
-	)
-
-	comments, response, err := instance.Content.Comment.Gets(context.Background(), contentID, expand,
-		nil, startAt, maxResults)
-	if err != nil {
-
-		if response != nil {
-			if response.Code == http.StatusBadRequest {
-				log.Println(response.API)
-			}
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-
-	for _, comment := range comments.Results {
-		log.Println(comment.Title, comment.ID, comment.Type)
-	}
-
-}
diff --git a/confluence/examples/contentLabels/add/add.go b/confluence/examples/contentLabels/add/add.go
deleted file mode 100644
index d98c66a..0000000
--- a/confluence/examples/contentLabels/add/add.go
+++ /dev/null
@@ -1,47 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	atlassian, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	atlassian.Auth.SetBasicAuth(mail, token)
-	atlassian.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		contentID = "80412692"
-		payload   = []*confluence.ContentLabelPayloadScheme{
-			{
-				Prefix: "global",
-				Name:   "label-02",
-			},
-		}
-	)
-
-	labels, response, err := atlassian.Content.Label.Add(context.Background(), contentID, payload, false)
-	if err != nil {
-		log.Println(response.Endpoint)
-		log.Println(response.Bytes.String())
-		log.Fatal(err)
-	}
-
-	for _, label := range labels.Results {
-		log.Println(label)
-	}
-
-}
diff --git a/confluence/examples/contentLabels/gets/gets.go b/confluence/examples/contentLabels/gets/gets.go
deleted file mode 100644
index 4a203e8..0000000
--- a/confluence/examples/contentLabels/gets/gets.go
+++ /dev/null
@@ -1,43 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	atlassian, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	atlassian.Auth.SetBasicAuth(mail, token)
-	atlassian.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		contentID  = "80412692"
-		prefix     = ""
-		startAt    = 0
-		maxResults = 50
-	)
-
-	labels, response, err := atlassian.Content.Label.Gets(context.Background(), contentID, prefix, startAt, maxResults)
-	if err != nil {
-		log.Println(response.Endpoint)
-		log.Println(response.Bytes.String())
-		log.Fatal(err)
-	}
-
-	for _, label := range labels.Results {
-		log.Println(label)
-	}
-}
diff --git a/confluence/examples/contentLabels/remove/remove.go b/confluence/examples/contentLabels/remove/remove.go
deleted file mode 100644
index f7f7e38..0000000
--- a/confluence/examples/contentLabels/remove/remove.go
+++ /dev/null
@@ -1,33 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	atlassian, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	atlassian.Auth.SetBasicAuth(mail, token)
-	atlassian.Auth.SetUserAgent("curl/7.54.0")
-
-	response, err := atlassian.Content.Label.Remove(context.Background(), "80412692", "label-02")
-	if err != nil {
-		log.Println(response.Endpoint)
-		log.Println(response.Bytes.String())
-		log.Fatal(err)
-	}
-
-}
diff --git a/confluence/examples/contentPermission/check/check.go b/confluence/examples/contentPermission/check/check.go
deleted file mode 100644
index 5c4b3c8..0000000
--- a/confluence/examples/contentPermission/check/check.go
+++ /dev/null
@@ -1,53 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		contentID = "76513281"
-		payload   = &confluence.CheckPermissionScheme{
-			Subject: &confluence.PermissionSubjectScheme{
-				Type:       "user",
-				Identifier: "5b86be50b8e3cb5895860d6d",
-			},
-			Operation: "read",
-		}
-	)
-
-	check, response, err := instance.Content.Permission.Check(context.Background(), contentID, payload)
-	if err != nil {
-
-		if response != nil {
-			if response.Code == http.StatusBadRequest {
-				log.Println(response.API)
-			}
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-
-	log.Println(check.HasPermission)
-}
diff --git a/confluence/examples/contentProperties/create/create.go b/confluence/examples/contentProperties/create/create.go
deleted file mode 100644
index b653d8d..0000000
--- a/confluence/examples/contentProperties/create/create.go
+++ /dev/null
@@ -1,47 +0,0 @@
-package main
-
-import (
-	"context"
-	"fmt"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var payload = &confluence.ContentPropertyPayloadScheme{
-		Key:   "key",
-		Value: "value",
-	}
-
-	property, response, err := instance.Content.Property.Create(context.Background(), "80412692", payload)
-	if err != nil {
-		if response != nil {
-			if response.Code == http.StatusBadRequest {
-				log.Println(response.API)
-			}
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-	fmt.Println(property)
-
-}
diff --git a/confluence/examples/contentProperties/delete/delete.go b/confluence/examples/contentProperties/delete/delete.go
deleted file mode 100644
index f797373..0000000
--- a/confluence/examples/contentProperties/delete/delete.go
+++ /dev/null
@@ -1,39 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	response, err := instance.Content.Property.Delete(context.Background(), "80412692", "key")
-	if err != nil {
-		if response != nil {
-			if response.Code == http.StatusBadRequest {
-				log.Println(response.API)
-			}
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-}
diff --git a/confluence/examples/contentProperties/get/get.go b/confluence/examples/contentProperties/get/get.go
deleted file mode 100644
index cf7af60..0000000
--- a/confluence/examples/contentProperties/get/get.go
+++ /dev/null
@@ -1,41 +0,0 @@
-package main
-
-import (
-	"context"
-	"fmt"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	property, response, err := instance.Content.Property.Get(context.Background(), "80412692", "editor")
-	if err != nil {
-		if response != nil {
-			if response.Code == http.StatusBadRequest {
-				log.Println(response.API)
-			}
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-	fmt.Println(property)
-}
diff --git a/confluence/examples/contentProperties/gets/gets.go b/confluence/examples/contentProperties/gets/gets.go
deleted file mode 100644
index f7cc1e8..0000000
--- a/confluence/examples/contentProperties/gets/gets.go
+++ /dev/null
@@ -1,51 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		contentID  = "80412692"
-		expand     = []string{"version"}
-		startAt    = 0
-		maxResults = 50
-	)
-
-	properties, response, err := instance.Content.Property.Gets(context.Background(), contentID, expand, startAt, maxResults)
-	if err != nil {
-		if response != nil {
-			if response.Code == http.StatusBadRequest {
-				log.Println(response.API)
-			}
-		}
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-
-	for _, property := range properties.Results {
-		log.Println(property)
-	}
-
-}
diff --git a/confluence/examples/space/content/content.go b/confluence/examples/space/content/content.go
deleted file mode 100644
index 0c1d364..0000000
--- a/confluence/examples/space/content/content.go
+++ /dev/null
@@ -1,52 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		spaceKey   = "DUMMY"
-		depth      = "all"
-		expand     = []string{"operations"}
-		startAt    = 0
-		maxResults = 50
-	)
-
-	contents, response, err := instance.Space.Content(context.Background(), spaceKey, depth, expand, startAt, maxResults)
-	if err != nil {
-
-		if response != nil {
-			if response.Code == http.StatusBadRequest {
-				log.Println(response.API)
-			}
-		}
-		log.Println("Endpoint:", response.Endpoint)
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-
-	log.Println(contents.Links)
-	log.Println(contents.Page)
-}
diff --git a/confluence/examples/space/contentByType/contentByType.go b/confluence/examples/space/contentByType/contentByType.go
deleted file mode 100644
index 74fd1d0..0000000
--- a/confluence/examples/space/contentByType/contentByType.go
+++ /dev/null
@@ -1,55 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		spaceKey    = "DUMMY"
-		contentType = "page"
-		depth       = "all"
-		expand      = []string{"operations"}
-		startAt     = 0
-		maxResults  = 50
-	)
-
-	contents, response, err := instance.Space.ContentByType(context.Background(), spaceKey, contentType, depth, expand, startAt, maxResults)
-	if err != nil {
-
-		if response != nil {
-			if response.Code == http.StatusBadRequest {
-				log.Println(response.API)
-			}
-		}
-		log.Println("Endpoint:", response.Endpoint)
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-
-	for _, content := range contents.Results {
-		log.Println(content.ID, content.Title)
-	}
-
-}
diff --git a/confluence/examples/space/create/create.go b/confluence/examples/space/create/create.go
deleted file mode 100644
index fe98b1f..0000000
--- a/confluence/examples/space/create/create.go
+++ /dev/null
@@ -1,55 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var payload = &confluence.CreateSpaceScheme{
-		Key:  "DUM",
-		Name: "Dum Confluence Space",
-		Description: &confluence.CreateSpaceDescriptionScheme{
-			Plain: &confluence.CreateSpaceDescriptionPlainScheme{
-				Value:          "Confluence Space Description Sample",
-				Representation: "plain",
-			},
-		},
-		AnonymousAccess:  true,
-		UnlicensedAccess: false,
-	}
-
-	space, response, err := instance.Space.Create(context.Background(), payload, false)
-	if err != nil {
-
-		if response != nil {
-			if response.Code == http.StatusBadRequest {
-				log.Println(response.API)
-			}
-		}
-		log.Println("Endpoint:", response.Endpoint)
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-	log.Println(space)
-}
diff --git a/confluence/examples/space/delete/delete.go b/confluence/examples/space/delete/delete.go
deleted file mode 100644
index d00f324..0000000
--- a/confluence/examples/space/delete/delete.go
+++ /dev/null
@@ -1,44 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	task, response, err := instance.Space.Delete(context.Background(), "DS")
-	if err != nil {
-
-		if response != nil {
-			if response.Code == http.StatusBadRequest {
-				log.Println(response.API)
-			}
-		}
-		log.Println("Endpoint:", response.Endpoint)
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-
-	log.Println(task.ID)
-	log.Println(task.Links.Status)
-}
diff --git a/confluence/examples/space/get/get.go b/confluence/examples/space/get/get.go
deleted file mode 100644
index 674dc98..0000000
--- a/confluence/examples/space/get/get.go
+++ /dev/null
@@ -1,42 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	space, response, err := instance.Space.Get(context.Background(), "DUMMY", []string{"operations"})
-	if err != nil {
-
-		if response != nil {
-			if response.Code == http.StatusBadRequest {
-				log.Println(response.API)
-			}
-		}
-		log.Println("Endpoint:", response.Endpoint)
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-	log.Println(space)
-}
diff --git a/confluence/examples/space/gets/gets.go b/confluence/examples/space/gets/gets.go
deleted file mode 100644
index ce59841..0000000
--- a/confluence/examples/space/gets/gets.go
+++ /dev/null
@@ -1,60 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		options = &confluence.GetSpacesOptionScheme{
-			SpaceKeys:       nil,
-			SpaceIDs:        []int{80838666, 196613},
-			SpaceType:       "",
-			Status:          "",
-			Labels:          nil,
-			Favorite:        false,
-			FavoriteUserKey: "",
-			Expand:          nil,
-		}
-		startAt    = 0
-		maxResults = 25
-	)
-
-	spaces, response, err := instance.Space.Gets(context.Background(), options, startAt, maxResults)
-	if err != nil {
-
-		if response != nil {
-			if response.Code == http.StatusBadRequest {
-				log.Println(response.API)
-			}
-		}
-		log.Println("Endpoint:", response.Endpoint)
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-
-	for _, space := range spaces.Results {
-		log.Println(space.Name, space.Key, space.ID)
-	}
-}
diff --git a/confluence/examples/space/update/update.go b/confluence/examples/space/update/update.go
deleted file mode 100644
index e4164d1..0000000
--- a/confluence/examples/space/update/update.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package main
-
-import (
-	"context"
-	"github.com/ctreminiom/go-atlassian/confluence"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() {
-
-	var (
-		host  = os.Getenv("HOST")
-		mail  = os.Getenv("MAIL")
-		token = os.Getenv("TOKEN")
-	)
-
-	instance, err := confluence.New(nil, host)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	instance.Auth.SetBasicAuth(mail, token)
-	instance.Auth.SetUserAgent("curl/7.54.0")
-
-	var (
-		spaceKey = "DUMMY"
-		payload  = &confluence.UpdateSpaceScheme{
-			Name: "DUMMY Space - Updated",
-			Description: &confluence.CreateSpaceDescriptionScheme{
-				Plain: &confluence.CreateSpaceDescriptionPlainScheme{
-					Value:          "Dummy Space - Description - Updated",
-					Representation: "plain",
-				},
-			},
-			Homepage: &confluence.UpdateSpaceHomepageScheme{ID: "65798145"},
-		}
-	)
-
-	spaceUpdated, response, err := instance.Space.Update(context.Background(), spaceKey, payload)
-	if err != nil {
-
-		if response != nil {
-			if response.Code == http.StatusBadRequest {
-				log.Println(response.API)
-			}
-		}
-		log.Println("Endpoint:", response.Endpoint)
-		log.Fatal(err)
-	}
-
-	log.Println("Endpoint:", response.Endpoint)
-	log.Println("Status Code:", response.Code)
-	log.Println(spaceUpdated)
-}
diff --git a/confluence/space.go b/confluence/space.go
index 7f4a28f..dbd3a95 100644
--- a/confluence/space.go
+++ b/confluence/space.go
@@ -3,6 +3,7 @@ package confluence
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"net/http"
 	"net/url"
 	"strconv"
@@ -13,32 +14,9 @@ type SpaceService struct {
 	client *Client
 }
 
-type SpacePageScheme struct {
-	Results []*SpaceScheme `json:"results,omitempty"`
-	Start   int            `json:"start"`
-	Limit   int            `json:"limit"`
-	Size    int            `json:"size"`
-	Links   struct {
-		Base    string `json:"base"`
-		Context string `json:"context"`
-		Self    string `json:"self"`
-	} `json:"_links"`
-}
-
-type GetSpacesOptionScheme struct {
-	SpaceKeys       []string
-	SpaceIDs        []int
-	SpaceType       string
-	Status          string
-	Labels          []string
-	Favorite        bool
-	FavoriteUserKey string
-	Expand          []string
-}
-
 // Gets returns all spaces. The returned spaces are ordered alphabetically in ascending order by space key.
-func (s *SpaceService) Gets(ctx context.Context, options *GetSpacesOptionScheme, startAt, maxResults int) (
-	result *SpacePageScheme, response *ResponseScheme, err error) {
+func (s *SpaceService) Gets(ctx context.Context, options *model.GetSpacesOptionScheme, startAt, maxResults int) (
+	result *model.SpacePageScheme, response *ResponseScheme, err error) {
 
 	query := url.Values{}
 	query.Add("start", strconv.Itoa(startAt))
@@ -99,63 +77,10 @@ func (s *SpaceService) Gets(ctx context.Context, options *GetSpacesOptionScheme,
 	return
 }
 
-type CreateSpaceScheme struct {
-	Key              string                        `json:"key,omitempty"`
-	Name             string                        `json:"name,omitempty"`
-	Description      *CreateSpaceDescriptionScheme `json:"description,omitempty"`
-	AnonymousAccess  bool                          `json:"anonymousAccess,omitempty"`
-	UnlicensedAccess bool                          `json:"unlicensedAccess,omitempty"`
-}
-
-type CreateSpaceDescriptionScheme struct {
-	Plain *CreateSpaceDescriptionPlainScheme `json:"plain"`
-}
-
-type CreateSpaceDescriptionPlainScheme struct {
-	Value          string `json:"value"`
-	Representation string `json:"representation"`
-}
-
-type SpacePermissionScheme struct {
-	Subject   *SubjectPermissionScheme   `json:"subject,omitempty"`
-	Operation *OperationPermissionScheme `json:"operation,omitempty"`
-}
-
-type OperationPermissionScheme struct {
-	Operation  string `json:"operation,omitempty"`
-	TargetType string `json:"targetType,omitempty"`
-}
-
-type SubjectPermissionScheme struct {
-	User       *UserPermissionScheme  `json:"user,omitempty"`
-	Group      *GroupPermissionScheme `json:"group,omitempty"`
-	Expandable struct {
-		User  string `json:"user,omitempty"`
-		Group string `json:"group,omitempty"`
-	} `json:"_expandable,omitempty"`
-}
-
-type UserPermissionScheme struct {
-	Results []*UserScheme `json:"results,omitempty"`
-	Size    int           `json:"size,omitempty"`
-}
-
-type GroupPermissionScheme struct {
-	Results []*GroupScheme `json:"results,omitempty"`
-	Size    int            `json:"size,omitempty"`
-}
-
-type GroupScheme struct {
-	Type  string      `json:"type,omitempty"`
-	Name  string      `json:"name,omitempty"`
-	ID    string      `json:"id,omitempty"`
-	Links *LinkScheme `json:"_links,omitempty"`
-}
-
 // Create creates a new space.
 // Note, currently you cannot set space labels when creating a space.
-func (s *SpaceService) Create(ctx context.Context, payload *CreateSpaceScheme, private bool) (
-	result *SpaceScheme, response *ResponseScheme, err error) {
+func (s *SpaceService) Create(ctx context.Context, payload *model.CreateSpaceScheme, private bool) (
+	result *model.SpaceScheme, response *ResponseScheme, err error) {
 
 	payloadAsReader, err := transformStructToReader(payload)
 	if err != nil {
@@ -163,11 +88,11 @@ func (s *SpaceService) Create(ctx context.Context, payload *CreateSpaceScheme, p
 	}
 
 	if len(payload.Name) == 0 {
-		return nil, nil, notSpaceNameProvidedError
+		return nil, nil, model.ErrNoSpaceNameError
 	}
 
 	if len(payload.Key) == 0 {
-		return nil, nil, notSpaceKeyProvidedError
+		return nil, nil, model.ErrNoSpaceKeyError
 	}
 
 	var endpoint strings.Builder
@@ -196,11 +121,11 @@ func (s *SpaceService) Create(ctx context.Context, payload *CreateSpaceScheme, p
 // Get returns a space.
 // This includes information like the name, description, and permissions,
 // but not the content in the space.
-func (s *SpaceService) Get(ctx context.Context, spaceKey string, expand []string) (result *SpaceScheme,
+func (s *SpaceService) Get(ctx context.Context, spaceKey string, expand []string) (result *model.SpaceScheme,
 	response *ResponseScheme, err error) {
 
 	if len(spaceKey) == 0 {
-		return nil, nil, notSpaceKeyProvidedError
+		return nil, nil, model.ErrNoSpaceKeyError
 	}
 
 	query := url.Values{}
@@ -230,22 +155,12 @@ func (s *SpaceService) Get(ctx context.Context, spaceKey string, expand []string
 	return
 }
 
-type UpdateSpaceScheme struct {
-	Name        string                        `json:"name,omitempty"`
-	Description *CreateSpaceDescriptionScheme `json:"description,omitempty"`
-	Homepage    *UpdateSpaceHomepageScheme    `json:"homepage,omitempty"`
-}
-
-type UpdateSpaceHomepageScheme struct {
-	ID string `json:"id"`
-}
-
 // Update updates the name, description, or homepage of a space.
-func (s *SpaceService) Update(ctx context.Context, spaceKey string, payload *UpdateSpaceScheme) (result *SpaceScheme,
+func (s *SpaceService) Update(ctx context.Context, spaceKey string, payload *model.UpdateSpaceScheme) (result *model.SpaceScheme,
 	response *ResponseScheme, err error) {
 
 	if len(spaceKey) == 0 {
-		return nil, nil, notSpaceKeyProvidedError
+		return nil, nil, model.ErrNoSpaceKeyError
 	}
 
 	payloadAsReader, err := transformStructToReader(payload)
@@ -275,10 +190,10 @@ func (s *SpaceService) Update(ctx context.Context, spaceKey string, payload *Upd
 // Note, the space will be deleted in a long running task.
 // Therefore, the space may not be deleted yet when this method has returned.
 // Clients should poll the status link that is returned in the response until the task completes.
-func (s *SpaceService) Delete(ctx context.Context, spaceKey string) (result *TaskScheme, response *ResponseScheme, err error) {
+func (s *SpaceService) Delete(ctx context.Context, spaceKey string) (result *model.ContentTaskScheme, response *ResponseScheme, err error) {
 
 	if len(spaceKey) == 0 {
-		return nil, nil, notSpaceKeyProvidedError
+		return nil, nil, model.ErrNoSpaceKeyError
 	}
 
 	var endpoint = fmt.Sprintf("/wiki/rest/api/space/%v", spaceKey)
@@ -300,10 +215,10 @@ func (s *SpaceService) Delete(ctx context.Context, spaceKey string) (result *Tas
 // The returned content is grouped by type (pages then blogposts),
 // then ordered by content ID in ascending order.
 func (s *SpaceService) Content(ctx context.Context, spaceKey, depth string, expand []string, startAt, maxResults int) (
-	result *ContentChildrenScheme, response *ResponseScheme, err error) {
+	result *model.ContentChildrenScheme, response *ResponseScheme, err error) {
 
 	if len(spaceKey) == 0 {
-		return nil, nil, notSpaceKeyProvidedError
+		return nil, nil, model.ErrNoSpaceKeyError
 	}
 
 	query := url.Values{}
@@ -336,10 +251,10 @@ func (s *SpaceService) Content(ctx context.Context, spaceKey, depth string, expa
 // ContentByType returns all content of a given type, in a space.
 // The returned content is ordered by content ID in ascending order.
 func (s *SpaceService) ContentByType(ctx context.Context, spaceKey, contentType, depth string, expand []string, startAt,
-	maxResults int) (result *ContentPageScheme, response *ResponseScheme, err error) {
+	maxResults int) (result *model.ContentPageScheme, response *ResponseScheme, err error) {
 
 	if len(spaceKey) == 0 {
-		return nil, nil, notSpaceKeyProvidedError
+		return nil, nil, model.ErrNoSpaceKeyError
 	}
 
 	query := url.Values{}
@@ -368,8 +283,3 @@ func (s *SpaceService) ContentByType(ctx context.Context, spaceKey, contentType,
 
 	return
 }
-
-var (
-	notSpaceNameProvidedError = fmt.Errorf("error, space name parameter is required, please provide a valid value")
-	notSpaceKeyProvidedError  = fmt.Errorf("error, space key parameter is required, please provide a valid value")
-)
diff --git a/pkg/infra/models/confluence_content.go b/pkg/infra/models/confluence_content.go
new file mode 100644
index 0000000..a62ce2b
--- /dev/null
+++ b/pkg/infra/models/confluence_content.go
@@ -0,0 +1,214 @@
+package models
+
+import "time"
+
+type GetContentOptionsScheme struct {
+	ContextType, SpaceKey   string
+	Title, Trigger, OrderBy string
+	Status, Expand          []string
+	PostingDay              time.Time
+}
+
+type ContentPageScheme struct {
+	Results []*ContentScheme `json:"results"`
+	Start   int              `json:"start"`
+	Limit   int              `json:"limit"`
+	Size    int              `json:"size"`
+	Links   *LinkScheme      `json:"_links"`
+}
+
+type LinkScheme struct {
+	Base     string `json:"base,omitempty"`
+	Context  string `json:"context,omitempty"`
+	Self     string `json:"self,omitempty"`
+	Tinyui   string `json:"tinyui,omitempty"`
+	Editui   string `json:"editui,omitempty"`
+	Webui    string `json:"webui,omitempty"`
+	Download string `json:"download,omitempty"`
+	Next     string `json:"next"`
+}
+
+type ContentScheme struct {
+	ID         string                  `json:"id,omitempty"`
+	Type       string                  `json:"type,omitempty"`
+	Status     string                  `json:"status,omitempty"`
+	Title      string                  `json:"title,omitempty"`
+	Expandable *ExpandableScheme       `json:"_expandable,omitempty"`
+	Links      *LinkScheme             `json:"_links,omitempty"`
+	ChildTypes *ChildTypesScheme       `json:"childTypes,omitempty"`
+	Space      *SpaceScheme            `json:"space,omitempty"`
+	Metadata   *MetadataScheme         `json:"metadata,omitempty"`
+	Operations []*OperationScheme      `json:"operations,omitempty"`
+	Body       *BodyScheme             `json:"body,omitempty"`
+	Version    *ContentVersionScheme   `json:"version,omitempty"`
+	Extensions *ContentExtensionScheme `json:"extensions,omitempty"`
+	Ancestors  []*ContentScheme        `json:"ancestors,omitempty"`
+}
+
+type ContentExtensionScheme struct {
+	MediaType            string `json:"mediaType,omitempty"`
+	FileSize             int    `json:"fileSize,omitempty"`
+	Comment              string `json:"comment,omitempty"`
+	MediaTypeDescription string `json:"mediaTypeDescription,omitempty"`
+	FileID               string `json:"fileId,omitempty"`
+}
+
+type ContentVersionScheme struct {
+	By            *ContentUserScheme          `json:"by,omitempty"`
+	Number        int                         `json:"number,omitempty"`
+	When          string                      `json:"when,omitempty"`
+	FriendlyWhen  string                      `json:"friendlyWhen,omitempty"`
+	Message       string                      `json:"message,omitempty"`
+	MinorEdit     bool                        `json:"minorEdit,omitempty"`
+	Content       *ContentScheme              `json:"content,omitempty"`
+	Collaborators *VersionCollaboratorsScheme `json:"collaborators,omitempty"`
+	Expandable    struct {
+		Content       string `json:"content"`
+		Collaborators string `json:"collaborators"`
+	} `json:"_expandable"`
+	ContentTypeModified bool `json:"contentTypeModified"`
+}
+
+type VersionCollaboratorsScheme struct {
+	Users    []*ContentUserScheme `json:"users,omitempty"`
+	UserKeys []string             `json:"userKeys,omitempty"`
+}
+
+type BodyScheme struct {
+	View                *BodyNodeScheme `json:"view"`
+	ExportView          *BodyNodeScheme `json:"export_view"`
+	StyledView          *BodyNodeScheme `json:"styled_view"`
+	Storage             *BodyNodeScheme `json:"storage"`
+	Editor2             *BodyNodeScheme `json:"editor2"`
+	AnonymousExportView *BodyNodeScheme `json:"anonymous_export_view"`
+}
+
+type BodyNodeScheme struct {
+	Value          string `json:"value,omitempty"`
+	Representation string `json:"representation,omitempty"`
+}
+
+type OperationScheme struct {
+	Operation  string `json:"operation,omitempty"`
+	TargetType string `json:"targetType,omitempty"`
+}
+
+type MetadataScheme struct {
+	Labels     *LabelsScheme     `json:"labels"`
+	Expandable *ExpandableScheme `json:"_expandable,omitempty"`
+	MediaType  string            `json:"mediaType,omitempty"`
+}
+
+type LabelsScheme struct {
+	Results []*LabelValueScheme `json:"results,omitempty"`
+	Start   int                 `json:"start,omitempty"`
+	Limit   int                 `json:"limit,omitempty"`
+	Size    int                 `json:"size,omitempty"`
+	Links   *LinkScheme         `json:"_links,omitempty"`
+}
+
+type LabelValueScheme struct {
+	Prefix string `json:"prefix,omitempty"`
+	Name   string `json:"name,omitempty"`
+	ID     string `json:"id,omitempty"`
+	Label  string `json:"label,omitempty"`
+}
+
+type ChildTypesScheme struct {
+	Attachment *ChildTypeScheme `json:"attachment,omitempty"`
+	Comment    *ChildTypeScheme `json:"comment,omitempty"`
+	Page       *ChildTypeScheme `json:"page,omitempty"`
+}
+
+type ChildTypeScheme struct {
+	Value bool `json:"value,omitempty"`
+	Links struct {
+		Self string `json:"self,omitempty"`
+	} `json:"_links,omitempty"`
+}
+
+type ExpandableScheme struct {
+	Container           string `json:"container"`
+	Metadata            string `json:"metadata"`
+	Restrictions        string `json:"restrictions"`
+	History             string `json:"history"`
+	Body                string `json:"body"`
+	Version             string `json:"version"`
+	Descendants         string `json:"descendants"`
+	Space               string `json:"space"`
+	ChildTypes          string `json:"childTypes"`
+	Operations          string `json:"operations"`
+	SchedulePublishDate string `json:"schedulePublishDate"`
+	Children            string `json:"children"`
+	Ancestors           string `json:"ancestors"`
+	Settings            string `json:"settings"`
+	LookAndFeel         string `json:"lookAndFeel"`
+	Identifiers         string `json:"identifiers"`
+	Permissions         string `json:"permissions"`
+	Icon                string `json:"icon"`
+	Description         string `json:"description"`
+	Theme               string `json:"theme"`
+	Homepage            string `json:"homepage"`
+	LastUpdated         string `json:"lastUpdated"`
+	PreviousVersion     string `json:"previousVersion"`
+	Contributors        string `json:"contributors"`
+	NextVersion         string `json:"nextVersion"`
+}
+
+type ContentHistoryScheme struct {
+	Latest          bool                              `json:"latest,omitempty"`
+	CreatedBy       *ContentUserScheme                `json:"createdBy,omitempty"`
+	CreatedDate     string                            `json:"createdDate,omitempty"`
+	LastUpdated     *VersionScheme                    `json:"lastUpdated,omitempty"`
+	PreviousVersion *VersionScheme                    `json:"previousVersion,omitempty"`
+	Contributors    *ContentHistoryContributorsScheme `json:"contributors,omitempty"`
+	NextVersion     *VersionScheme                    `json:"nextVersion,omitempty"`
+	Expandable      *ExpandableScheme                 `json:"_expandable,omitempty"`
+	Links           *LinkScheme                       `json:"_links,omitempty"`
+}
+
+type ContentHistoryContributorsScheme struct {
+	Publishers *VersionCollaboratorsScheme `json:"publishers,omitempty"`
+}
+
+type ContentUserScheme struct {
+	Type           string                   `json:"type,omitempty"`
+	Username       string                   `json:"username,omitempty"`
+	UserKey        string                   `json:"userKey,omitempty"`
+	AccountID      string                   `json:"accountId,omitempty"`
+	AccountType    string                   `json:"accountType,omitempty"`
+	Email          string                   `json:"email,omitempty"`
+	PublicName     string                   `json:"publicName,omitempty"`
+	ProfilePicture *ProfilePictureScheme    `json:"profilePicture,omitempty"`
+	DisplayName    string                   `json:"displayName,omitempty"`
+	Operations     []*OperationScheme       `json:"operations,omitempty"`
+	Details        *ContentUserDetailScheme `json:"details,omitempty"`
+	PersonalSpace  *SpaceScheme             `json:"personalSpace,omitempty"`
+	Expandable     *ExpandableScheme        `json:"_expandable,omitempty"`
+	Links          *LinkScheme              `json:"_links,omitempty"`
+}
+
+type ProfilePictureScheme struct {
+	Path      string `json:"path,omitempty"`
+	Width     int    `json:"width,omitempty"`
+	Height    int    `json:"height,omitempty"`
+	IsDefault bool   `json:"isDefault,omitempty"`
+}
+
+type ContentUserDetailScheme struct {
+	Business *UserBusinessDetailScheme `json:"business,omitempty"`
+	Personal *UserPersonalDetailScheme `json:"personal,omitempty"`
+}
+
+type UserBusinessDetailScheme struct {
+	Position   string `json:"position,omitempty"`
+	Department string `json:"department,omitempty"`
+	Location   string `json:"location,omitempty"`
+}
+
+type UserPersonalDetailScheme struct {
+	Phone   string `json:"phone,omitempty"`
+	Im      string `json:"im,omitempty"`
+	Website string `json:"website,omitempty"`
+	Email   string `json:"email,omitempty"`
+}
diff --git a/pkg/infra/models/confluence_content_attachement.go b/pkg/infra/models/confluence_content_attachement.go
new file mode 100644
index 0000000..a8d839c
--- /dev/null
+++ b/pkg/infra/models/confluence_content_attachement.go
@@ -0,0 +1,7 @@
+package models
+
+type GetContentAttachmentsOptionsScheme struct {
+	Expand    []string
+	FileName  string
+	MediaType string
+}
diff --git a/pkg/infra/models/confluence_content_children.go b/pkg/infra/models/confluence_content_children.go
new file mode 100644
index 0000000..05be04e
--- /dev/null
+++ b/pkg/infra/models/confluence_content_children.go
@@ -0,0 +1,46 @@
+package models
+
+type ContentChildrenScheme struct {
+	Attachment *ContentPageScheme `json:"attachment,omitempty"`
+	Comments   *ContentPageScheme `json:"comment,omitempty"`
+	Page       *ContentPageScheme `json:"page,omitempty"`
+	Links      *LinkScheme        `json:"_links,omitempty"`
+}
+
+type CopyOptionsScheme struct {
+	CopyAttachments    bool                       `json:"copyAttachments,omitempty"`
+	CopyPermissions    bool                       `json:"copyPermissions,omitempty"`
+	CopyProperties     bool                       `json:"copyProperties,omitempty"`
+	CopyLabels         bool                       `json:"copyLabels,omitempty"`
+	CopyCustomContents bool                       `json:"copyCustomContents,omitempty"`
+	DestinationPageID  string                     `json:"destinationPageId,omitempty"`
+	TitleOptions       *CopyTitleOptionScheme     `json:"titleOptions,omitempty"`
+	Destination        *CopyPageDestinationScheme `json:"destination,omitempty"`
+	PageTitle          string                     `json:"pageTitle,omitempty"`
+	Body               *CopyPageBodyScheme        `json:"body,omitempty"`
+}
+
+type CopyTitleOptionScheme struct {
+	Prefix  string `json:"prefix,omitempty"`
+	Replace string `json:"replace,omitempty"`
+	Search  string `json:"search,omitempty"`
+}
+
+type CopyPageDestinationScheme struct {
+	Type  string `json:"type,omitempty"`
+	Value string `json:"value,omitempty"`
+}
+
+type CopyPageBodyScheme struct {
+	Storage *BodyNodeScheme `json:"storage"`
+	Editor2 *BodyNodeScheme `json:"editor2"`
+}
+
+type ContentTaskScheme struct {
+	ID    string          `json:"id,omitempty"`
+	Links *TaskLinkScheme `json:"links,omitempty"`
+}
+
+type TaskLinkScheme struct {
+	Status string `json:"status"`
+}
diff --git a/pkg/infra/models/confluence_content_label.go b/pkg/infra/models/confluence_content_label.go
new file mode 100644
index 0000000..28e16c7
--- /dev/null
+++ b/pkg/infra/models/confluence_content_label.go
@@ -0,0 +1,20 @@
+package models
+
+type ContentLabelPayloadScheme struct {
+	Prefix string `json:"prefix,omitempty"`
+	Name   string `json:"name,omitempty"`
+}
+
+type ContentLabelPageScheme struct {
+	Results []*ContentLabelScheme `json:"results,omitempty"`
+	Start   int                   `json:"start,omitempty"`
+	Limit   int                   `json:"limit,omitempty"`
+	Size    int                   `json:"size,omitempty"`
+}
+
+type ContentLabelScheme struct {
+	Prefix string `json:"prefix,omitempty"`
+	Name   string `json:"name,omitempty"`
+	ID     string `json:"id,omitempty"`
+	Label  string `json:"label,omitempty"`
+}
diff --git a/pkg/infra/models/confluence_content_permission.go b/pkg/infra/models/confluence_content_permission.go
new file mode 100644
index 0000000..ce4ee4b
--- /dev/null
+++ b/pkg/infra/models/confluence_content_permission.go
@@ -0,0 +1,22 @@
+package models
+
+type CheckPermissionScheme struct {
+	Subject   *PermissionSubjectScheme `json:"subject,omitempty"`
+	Operation string                   `json:"operation,omitempty"`
+}
+
+type PermissionSubjectScheme struct {
+	Type       string `json:"type"`
+	Identifier string `json:"identifier"`
+}
+
+type PermissionCheckResponseScheme struct {
+	HasPermission bool                            `json:"hasPermission"`
+	Errors        []*PermissionCheckMessageScheme `json:"errors,omitempty"`
+}
+
+type PermissionCheckMessageScheme struct {
+	Translation string `json:"translation"`
+	Args        []struct {
+	} `json:"args"`
+}
diff --git a/pkg/infra/models/confluence_content_property.go b/pkg/infra/models/confluence_content_property.go
new file mode 100644
index 0000000..0e03d5c
--- /dev/null
+++ b/pkg/infra/models/confluence_content_property.go
@@ -0,0 +1,32 @@
+package models
+
+type ContentPropertyPayloadScheme struct {
+	Key   string `json:"key"`
+	Value string `json:"value"`
+}
+
+type ContentPropertyPageScheme struct {
+	Results []*ContentPropertyScheme `json:"results,omitempty"`
+	Start   int                      `json:"start,omitempty"`
+	Limit   int                      `json:"limit,omitempty"`
+	Size    int                      `json:"size,omitempty"`
+}
+
+type ContentPropertyScheme struct {
+	ID         string                        `json:"id,omitempty"`
+	Key        string                        `json:"key,omitempty"`
+	Value      interface{}                   `json:"value,omitempty"`
+	Version    *ContentPropertyVersionScheme `json:"version,omitempty"`
+	Expandable struct {
+		Content              string `json:"content,omitempty"`
+		AdditionalProperties string `json:"additionalProperties,omitempty"`
+	} `json:"_expandable,omitempty"`
+}
+
+type ContentPropertyVersionScheme struct {
+	When                string `json:"when,omitempty"`
+	Message             string `json:"message,omitempty"`
+	Number              int    `json:"number,omitempty"`
+	MinorEdit           bool   `json:"minorEdit,omitempty"`
+	ContentTypeModified bool   `json:"contentTypeModified,omitempty"`
+}
diff --git a/pkg/infra/models/confluence_space.go b/pkg/infra/models/confluence_space.go
new file mode 100644
index 0000000..8217d9c
--- /dev/null
+++ b/pkg/infra/models/confluence_space.go
@@ -0,0 +1,97 @@
+package models
+
+type SpaceScheme struct {
+	ID         int               `json:"id"`
+	Key        string            `json:"key"`
+	Name       string            `json:"name"`
+	Type       string            `json:"type"`
+	Status     string            `json:"status"`
+	Expandable *ExpandableScheme `json:"_expandable"`
+	Links      *LinkScheme       `json:"_links"`
+}
+
+type SpacePageScheme struct {
+	Results []*SpaceScheme `json:"results,omitempty"`
+	Start   int            `json:"start"`
+	Limit   int            `json:"limit"`
+	Size    int            `json:"size"`
+	Links   struct {
+		Base    string `json:"base"`
+		Context string `json:"context"`
+		Self    string `json:"self"`
+	} `json:"_links"`
+}
+
+type GetSpacesOptionScheme struct {
+	SpaceKeys       []string
+	SpaceIDs        []int
+	SpaceType       string
+	Status          string
+	Labels          []string
+	Favorite        bool
+	FavoriteUserKey string
+	Expand          []string
+}
+
+type CreateSpaceScheme struct {
+	Key              string                        `json:"key,omitempty"`
+	Name             string                        `json:"name,omitempty"`
+	Description      *CreateSpaceDescriptionScheme `json:"description,omitempty"`
+	AnonymousAccess  bool                          `json:"anonymousAccess,omitempty"`
+	UnlicensedAccess bool                          `json:"unlicensedAccess,omitempty"`
+}
+
+type CreateSpaceDescriptionScheme struct {
+	Plain *CreateSpaceDescriptionPlainScheme `json:"plain"`
+}
+
+type CreateSpaceDescriptionPlainScheme struct {
+	Value          string `json:"value"`
+	Representation string `json:"representation"`
+}
+
+type SpacePermissionScheme struct {
+	Subject   *SubjectPermissionScheme   `json:"subject,omitempty"`
+	Operation *OperationPermissionScheme `json:"operation,omitempty"`
+}
+
+type OperationPermissionScheme struct {
+	Operation  string `json:"operation,omitempty"`
+	TargetType string `json:"targetType,omitempty"`
+}
+
+type SubjectPermissionScheme struct {
+	User       *UserPermissionScheme  `json:"user,omitempty"`
+	Group      *GroupPermissionScheme `json:"group,omitempty"`
+	Expandable struct {
+		User  string `json:"user,omitempty"`
+		Group string `json:"group,omitempty"`
+	} `json:"_expandable,omitempty"`
+}
+
+type UserPermissionScheme struct {
+	Results []*UserScheme `json:"results,omitempty"`
+	Size    int           `json:"size,omitempty"`
+}
+
+type GroupPermissionScheme struct {
+	Results []*SpaceGroupScheme `json:"results,omitempty"`
+	Size    int                 `json:"size,omitempty"`
+}
+
+type SpaceGroupScheme struct {
+	Type  string      `json:"type,omitempty"`
+	Name  string      `json:"name,omitempty"`
+	ID    string      `json:"id,omitempty"`
+	Links *LinkScheme `json:"_links,omitempty"`
+}
+
+type UpdateSpaceScheme struct {
+	Name        string                        `json:"name,omitempty"`
+	Description *CreateSpaceDescriptionScheme `json:"description,omitempty"`
+	Homepage    *UpdateSpaceHomepageScheme    `json:"homepage,omitempty"`
+}
+
+type UpdateSpaceHomepageScheme struct {
+	ID string `json:"id"`
+}
diff --git a/pkg/infra/models/errors.go b/pkg/infra/models/errors.go
index 101c1ff..f1404db 100644
--- a/pkg/infra/models/errors.go
+++ b/pkg/infra/models/errors.go
@@ -15,6 +15,16 @@ var (
 	ErrNoFileNameError            = errors.New("sm: no file name set")
 	ErrNoFileReaderError          = errors.New("sm: no io.Reader set")
 
+	ErrNoContentIDError        = errors.New("confluence: no content id set")
+	ErrNoCQLError              = errors.New("confluence: no CQL query set")
+	ErrNoContentTypeError      = errors.New("confluence: no content type set")
+	ErrInvalidContentTypeError = errors.New("confluence: invalid content type: (page, comment, attachment)")
+	ValidContentTypes          = []string{"page", "comment", "attachment"}
+	ErrNoContentLabelError     = errors.New("confluence: no content label set")
+	ErrNoContentPropertyError  = errors.New("confluence: no content property set")
+	ErrNoSpaceNameError        = errors.New("confluence: no space name set")
+	ErrNoSpaceKeyError         = errors.New("confluence: no space key set")
+
 	ErrNoBoardIDError  = errors.New("agile: no board id set")
 	ErrNoFilterIDError = errors.New("agile: no filter id set")
 	ErrNoEpicIDError   = errors.New("agile: no epic id set")


Test patch:
diff --git a/confluence/confluence_test.go b/confluence/confluence_test.go
index 15924b5..7a5d01a 100644
--- a/confluence/confluence_test.go
+++ b/confluence/confluence_test.go
@@ -3,6 +3,7 @@ package confluence
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"github.com/stretchr/testify/assert"
 	"io"
 	"io/ioutil"
@@ -247,12 +248,12 @@ func Test_transformStructToReader(t *testing.T) {
 		{
 			name: "TransformStructToReaderWhenTheParametersAreCorrect",
 			args: args{
-				structure: &ContentScheme{
+				structure: &model.ContentScheme{
 					Type:  "page", // Valid values: page, blogpost, comment
 					Title: "Confluence Page Title",
-					Space: &SpaceScheme{Key: "DUMMY"},
-					Body: &BodyScheme{
-						Storage: &BodyNodeScheme{
+					Space: &model.SpaceScheme{Key: "DUMMY"},
+					Body: &model.BodyScheme{
+						Storage: &model.BodyNodeScheme{
 							Value:          "<p>This is <br/> a new page</p>",
 							Representation: "storage",
 						},
diff --git a/confluence/contentAttachments_test.go b/confluence/contentAttachments_test.go
index 014289e..8d9f92c 100644
--- a/confluence/contentAttachments_test.go
+++ b/confluence/contentAttachments_test.go
@@ -3,6 +3,7 @@ package confluence
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"github.com/stretchr/testify/assert"
 	"io"
 	"net/http"
@@ -18,7 +19,7 @@ func TestContentAttachmentService_Gets(t *testing.T) {
 		name                string
 		contentID           string
 		startAt, maxResults int
-		options             *GetContentAttachmentsOptionsScheme
+		options             *model.GetContentAttachmentsOptionsScheme
 		mockFile            string
 		wantHTTPMethod      string
 		endpoint            string
@@ -31,7 +32,7 @@ func TestContentAttachmentService_Gets(t *testing.T) {
 			contentID:  "5949392",
 			startAt:    0,
 			maxResults: 50,
-			options: &GetContentAttachmentsOptionsScheme{
+			options: &model.GetContentAttachmentsOptionsScheme{
 				Expand:    []string{"operations", "file"},
 				FileName:  "filename.png",
 				MediaType: ".png",
@@ -49,7 +50,7 @@ func TestContentAttachmentService_Gets(t *testing.T) {
 			contentID:  "",
 			startAt:    0,
 			maxResults: 50,
-			options: &GetContentAttachmentsOptionsScheme{
+			options: &model.GetContentAttachmentsOptionsScheme{
 				Expand:    []string{"operations", "file"},
 				FileName:  "filename.png",
 				MediaType: ".png",
@@ -67,7 +68,7 @@ func TestContentAttachmentService_Gets(t *testing.T) {
 			contentID:  "5949392",
 			startAt:    0,
 			maxResults: 50,
-			options: &GetContentAttachmentsOptionsScheme{
+			options: &model.GetContentAttachmentsOptionsScheme{
 				Expand:    []string{"operations", "file"},
 				FileName:  "filename.png",
 				MediaType: ".png",
@@ -85,7 +86,7 @@ func TestContentAttachmentService_Gets(t *testing.T) {
 			contentID:  "5949392",
 			startAt:    0,
 			maxResults: 50,
-			options: &GetContentAttachmentsOptionsScheme{
+			options: &model.GetContentAttachmentsOptionsScheme{
 				Expand:    []string{"operations", "file"},
 				FileName:  "filename.png",
 				MediaType: ".png",
@@ -117,7 +118,7 @@ func TestContentAttachmentService_Gets(t *testing.T) {
 			contentID:  "5949392",
 			startAt:    0,
 			maxResults: 50,
-			options: &GetContentAttachmentsOptionsScheme{
+			options: &model.GetContentAttachmentsOptionsScheme{
 				Expand:    []string{"operations", "file"},
 				FileName:  "filename.png",
 				MediaType: ".png",
@@ -135,7 +136,7 @@ func TestContentAttachmentService_Gets(t *testing.T) {
 			contentID:  "5949392",
 			startAt:    0,
 			maxResults: 50,
-			options: &GetContentAttachmentsOptionsScheme{
+			options: &model.GetContentAttachmentsOptionsScheme{
 				Expand:    []string{"operations", "file"},
 				FileName:  "filename.png",
 				MediaType: ".png",
diff --git a/confluence/contentChildrenDescendants_test.go b/confluence/contentChildrenDescendants_test.go
index ebb7dd0..941266d 100644
--- a/confluence/contentChildrenDescendants_test.go
+++ b/confluence/contentChildrenDescendants_test.go
@@ -3,6 +3,7 @@ package confluence
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"github.com/stretchr/testify/assert"
 	"net/http"
 	"net/url"
@@ -768,7 +769,7 @@ func TestContentChildrenDescendantService_CopyHierarchy(t *testing.T) {
 	testCases := []struct {
 		name               string
 		contentID          string
-		options            *CopyOptionsScheme
+		options            *model.CopyOptionsScheme
 		mockFile           string
 		wantHTTPMethod     string
 		endpoint           string
@@ -779,14 +780,14 @@ func TestContentChildrenDescendantService_CopyHierarchy(t *testing.T) {
 		{
 			name:      "CopyContentHierarchyWhenTheParametersAreCorrect",
 			contentID: "44747372",
-			options: &CopyOptionsScheme{
+			options: &model.CopyOptionsScheme{
 				CopyAttachments:    true,
 				CopyPermissions:    true,
 				CopyProperties:     true,
 				CopyLabels:         true,
 				CopyCustomContents: true,
 				DestinationPageID:  "80412692",
-				TitleOptions: &CopyTitleOptionScheme{
+				TitleOptions: &model.CopyTitleOptionScheme{
 					Prefix: "copy-01-",
 				},
 			},
@@ -801,14 +802,14 @@ func TestContentChildrenDescendantService_CopyHierarchy(t *testing.T) {
 		{
 			name:      "CopyContentHierarchyWhenTheContentIDIsNotProvided",
 			contentID: "",
-			options: &CopyOptionsScheme{
+			options: &model.CopyOptionsScheme{
 				CopyAttachments:    true,
 				CopyPermissions:    true,
 				CopyProperties:     true,
 				CopyLabels:         true,
 				CopyCustomContents: true,
 				DestinationPageID:  "80412692",
-				TitleOptions: &CopyTitleOptionScheme{
+				TitleOptions: &model.CopyTitleOptionScheme{
 					Prefix: "copy-01-",
 				},
 			},
@@ -835,14 +836,14 @@ func TestContentChildrenDescendantService_CopyHierarchy(t *testing.T) {
 		{
 			name:      "CopyContentHierarchyWhenTheContextIsNotProvided",
 			contentID: "44747372",
-			options: &CopyOptionsScheme{
+			options: &model.CopyOptionsScheme{
 				CopyAttachments:    true,
 				CopyPermissions:    true,
 				CopyProperties:     true,
 				CopyLabels:         true,
 				CopyCustomContents: true,
 				DestinationPageID:  "80412692",
-				TitleOptions: &CopyTitleOptionScheme{
+				TitleOptions: &model.CopyTitleOptionScheme{
 					Prefix: "copy-01-",
 				},
 			},
@@ -857,14 +858,14 @@ func TestContentChildrenDescendantService_CopyHierarchy(t *testing.T) {
 		{
 			name:      "CopyContentHierarchyWhenTheRequestMethodIsIncorrect",
 			contentID: "44747372",
-			options: &CopyOptionsScheme{
+			options: &model.CopyOptionsScheme{
 				CopyAttachments:    true,
 				CopyPermissions:    true,
 				CopyProperties:     true,
 				CopyLabels:         true,
 				CopyCustomContents: true,
 				DestinationPageID:  "80412692",
-				TitleOptions: &CopyTitleOptionScheme{
+				TitleOptions: &model.CopyTitleOptionScheme{
 					Prefix: "copy-01-",
 				},
 			},
@@ -879,14 +880,14 @@ func TestContentChildrenDescendantService_CopyHierarchy(t *testing.T) {
 		{
 			name:      "CopyContentHierarchyWhenTheStatusCodeIsIncorrect",
 			contentID: "44747372",
-			options: &CopyOptionsScheme{
+			options: &model.CopyOptionsScheme{
 				CopyAttachments:    true,
 				CopyPermissions:    true,
 				CopyProperties:     true,
 				CopyLabels:         true,
 				CopyCustomContents: true,
 				DestinationPageID:  "80412692",
-				TitleOptions: &CopyTitleOptionScheme{
+				TitleOptions: &model.CopyTitleOptionScheme{
 					Prefix: "copy-01-",
 				},
 			},
@@ -901,14 +902,14 @@ func TestContentChildrenDescendantService_CopyHierarchy(t *testing.T) {
 		{
 			name:      "CopyContentHierarchyWhenTheResponseBodyIsEmpty",
 			contentID: "44747372",
-			options: &CopyOptionsScheme{
+			options: &model.CopyOptionsScheme{
 				CopyAttachments:    true,
 				CopyPermissions:    true,
 				CopyProperties:     true,
 				CopyLabels:         true,
 				CopyCustomContents: true,
 				DestinationPageID:  "80412692",
-				TitleOptions: &CopyTitleOptionScheme{
+				TitleOptions: &model.CopyTitleOptionScheme{
 					Prefix: "copy-01-",
 				},
 			},
@@ -994,7 +995,7 @@ func TestContentChildrenDescendantService_CopyPage(t *testing.T) {
 		name               string
 		contentID          string
 		expand             []string
-		options            *CopyOptionsScheme
+		options            *model.CopyOptionsScheme
 		mockFile           string
 		wantHTTPMethod     string
 		endpoint           string
@@ -1006,14 +1007,14 @@ func TestContentChildrenDescendantService_CopyPage(t *testing.T) {
 			name:      "CopyPageWhenTheParametersAreCorrect",
 			contentID: "747366262",
 			expand:    []string{"childTypes.all", "container"},
-			options: &CopyOptionsScheme{
+			options: &model.CopyOptionsScheme{
 				CopyAttachments:    true,
 				CopyPermissions:    true,
 				CopyProperties:     true,
 				CopyLabels:         true,
 				CopyCustomContents: true,
 				PageTitle:          "new-page-copied-title",
-				Destination: &CopyPageDestinationScheme{
+				Destination: &model.CopyPageDestinationScheme{
 					Type:  "parent_page",
 					Value: "64290817",
 				},
@@ -1030,14 +1031,14 @@ func TestContentChildrenDescendantService_CopyPage(t *testing.T) {
 			name:      "CopyPageWhenTheContentIDIsNotProvided",
 			contentID: "",
 			expand:    []string{"childTypes.all", "container"},
-			options: &CopyOptionsScheme{
+			options: &model.CopyOptionsScheme{
 				CopyAttachments:    true,
 				CopyPermissions:    true,
 				CopyProperties:     true,
 				CopyLabels:         true,
 				CopyCustomContents: true,
 				PageTitle:          "new-page-copied-title",
-				Destination: &CopyPageDestinationScheme{
+				Destination: &model.CopyPageDestinationScheme{
 					Type:  "parent_page",
 					Value: "64290817",
 				},
@@ -1067,14 +1068,14 @@ func TestContentChildrenDescendantService_CopyPage(t *testing.T) {
 			name:      "CopyPageWhenTheRequestMethodIsIncorrect",
 			contentID: "747366262",
 			expand:    []string{"childTypes.all", "container"},
-			options: &CopyOptionsScheme{
+			options: &model.CopyOptionsScheme{
 				CopyAttachments:    true,
 				CopyPermissions:    true,
 				CopyProperties:     true,
 				CopyLabels:         true,
 				CopyCustomContents: true,
 				PageTitle:          "new-page-copied-title",
-				Destination: &CopyPageDestinationScheme{
+				Destination: &model.CopyPageDestinationScheme{
 					Type:  "parent_page",
 					Value: "64290817",
 				},
@@ -1091,14 +1092,14 @@ func TestContentChildrenDescendantService_CopyPage(t *testing.T) {
 			name:      "CopyPageWhenTheContextIsNotProvided",
 			contentID: "747366262",
 			expand:    []string{"childTypes.all", "container"},
-			options: &CopyOptionsScheme{
+			options: &model.CopyOptionsScheme{
 				CopyAttachments:    true,
 				CopyPermissions:    true,
 				CopyProperties:     true,
 				CopyLabels:         true,
 				CopyCustomContents: true,
 				PageTitle:          "new-page-copied-title",
-				Destination: &CopyPageDestinationScheme{
+				Destination: &model.CopyPageDestinationScheme{
 					Type:  "parent_page",
 					Value: "64290817",
 				},
@@ -1115,14 +1116,14 @@ func TestContentChildrenDescendantService_CopyPage(t *testing.T) {
 			name:      "CopyPageWhenTheStatusCodeIsIncorrect",
 			contentID: "747366262",
 			expand:    []string{"childTypes.all", "container"},
-			options: &CopyOptionsScheme{
+			options: &model.CopyOptionsScheme{
 				CopyAttachments:    true,
 				CopyPermissions:    true,
 				CopyProperties:     true,
 				CopyLabels:         true,
 				CopyCustomContents: true,
 				PageTitle:          "new-page-copied-title",
-				Destination: &CopyPageDestinationScheme{
+				Destination: &model.CopyPageDestinationScheme{
 					Type:  "parent_page",
 					Value: "64290817",
 				},
@@ -1139,14 +1140,14 @@ func TestContentChildrenDescendantService_CopyPage(t *testing.T) {
 			name:      "CopyPageWhenTheResponseBodyIsEmpty",
 			contentID: "747366262",
 			expand:    []string{"childTypes.all", "container"},
-			options: &CopyOptionsScheme{
+			options: &model.CopyOptionsScheme{
 				CopyAttachments:    true,
 				CopyPermissions:    true,
 				CopyProperties:     true,
 				CopyLabels:         true,
 				CopyCustomContents: true,
 				PageTitle:          "new-page-copied-title",
-				Destination: &CopyPageDestinationScheme{
+				Destination: &model.CopyPageDestinationScheme{
 					Type:  "parent_page",
 					Value: "64290817",
 				},
diff --git a/confluence/contentLabels_test.go b/confluence/contentLabels_test.go
index e75ee34..fb520cc 100644
--- a/confluence/contentLabels_test.go
+++ b/confluence/contentLabels_test.go
@@ -3,6 +3,7 @@ package confluence
 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 TestContentLabelService_Add(t *testing.T) {
 	testCases := []struct {
 		name               string
 		contentID          string
-		payload            []*ContentLabelPayloadScheme
+		payload            []*model.ContentLabelPayloadScheme
 		want400Response    bool
 		mockFile           string
 		wantHTTPMethod     string
@@ -26,7 +27,7 @@ func TestContentLabelService_Add(t *testing.T) {
 		{
 			name:      "AddContentLabelWhenTheParametersAreCorrect",
 			contentID: "48483737372",
-			payload: []*ContentLabelPayloadScheme{
+			payload: []*model.ContentLabelPayloadScheme{
 				{
 					Prefix: "global",
 					Name:   "label-02",
@@ -44,7 +45,7 @@ func TestContentLabelService_Add(t *testing.T) {
 		{
 			name:      "AddContentLabelWhenTheContentIDIsNotProvided",
 			contentID: "",
-			payload: []*ContentLabelPayloadScheme{
+			payload: []*model.ContentLabelPayloadScheme{
 				{
 					Prefix: "global",
 					Name:   "label-02",
@@ -62,7 +63,7 @@ func TestContentLabelService_Add(t *testing.T) {
 		{
 			name:      "AddContentLabelWhenTheContextIsNotProvided",
 			contentID: "48483737372",
-			payload: []*ContentLabelPayloadScheme{
+			payload: []*model.ContentLabelPayloadScheme{
 				{
 					Prefix: "global",
 					Name:   "label-02",
@@ -93,7 +94,7 @@ func TestContentLabelService_Add(t *testing.T) {
 		{
 			name:      "AddContentLabelWhenTheStatusCodeIsIncorrect",
 			contentID: "48483737372",
-			payload: []*ContentLabelPayloadScheme{
+			payload: []*model.ContentLabelPayloadScheme{
 				{
 					Prefix: "global",
 					Name:   "label-02",
@@ -111,7 +112,7 @@ func TestContentLabelService_Add(t *testing.T) {
 		{
 			name:      "AddContentLabelWhenTheResponseBodyIsEmpty",
 			contentID: "48483737372",
-			payload: []*ContentLabelPayloadScheme{
+			payload: []*model.ContentLabelPayloadScheme{
 				{
 					Prefix: "global",
 					Name:   "label-02",
diff --git a/confluence/contentPermission_test.go b/confluence/contentPermission_test.go
index 23e60b3..239658f 100644
--- a/confluence/contentPermission_test.go
+++ b/confluence/contentPermission_test.go
@@ -3,6 +3,7 @@ package confluence
 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 TestContentPermissionService_Check(t *testing.T) {
 	testCases := []struct {
 		name               string
 		contentID          string
-		payload            *CheckPermissionScheme
+		payload            *model.CheckPermissionScheme
 		mockFile           string
 		wantHTTPMethod     string
 		endpoint           string
@@ -25,8 +26,8 @@ func TestContentPermissionService_Check(t *testing.T) {
 		{
 			name:      "CheckContentPermissionsWhenTheParametersAreCorrect",
 			contentID: "847373747",
-			payload: &CheckPermissionScheme{
-				Subject: &PermissionSubjectScheme{
+			payload: &model.CheckPermissionScheme{
+				Subject: &model.PermissionSubjectScheme{
 					Type:       "user",
 					Identifier: "5b86be50b8e3cb5895860d6d",
 				},
@@ -43,8 +44,8 @@ func TestContentPermissionService_Check(t *testing.T) {
 		{
 			name:      "CheckContentPermissionsWhenTheContentIDIsNotProvided",
 			contentID: "",
-			payload: &CheckPermissionScheme{
-				Subject: &PermissionSubjectScheme{
+			payload: &model.CheckPermissionScheme{
+				Subject: &model.PermissionSubjectScheme{
 					Type:       "user",
 					Identifier: "5b86be50b8e3cb5895860d6d",
 				},
@@ -73,8 +74,8 @@ func TestContentPermissionService_Check(t *testing.T) {
 		{
 			name:      "CheckContentPermissionsWhenTheRequestMethodIsIncorrect",
 			contentID: "847373747",
-			payload: &CheckPermissionScheme{
-				Subject: &PermissionSubjectScheme{
+			payload: &model.CheckPermissionScheme{
+				Subject: &model.PermissionSubjectScheme{
 					Type:       "user",
 					Identifier: "5b86be50b8e3cb5895860d6d",
 				},
@@ -91,8 +92,8 @@ func TestContentPermissionService_Check(t *testing.T) {
 		{
 			name:      "CheckContentPermissionsWhenTheStatusCodeIsIncorrect",
 			contentID: "847373747",
-			payload: &CheckPermissionScheme{
-				Subject: &PermissionSubjectScheme{
+			payload: &model.CheckPermissionScheme{
+				Subject: &model.PermissionSubjectScheme{
 					Type:       "user",
 					Identifier: "5b86be50b8e3cb5895860d6d",
 				},
@@ -109,8 +110,8 @@ func TestContentPermissionService_Check(t *testing.T) {
 		{
 			name:      "CheckContentPermissionsWhenTheContextIsNotProvided",
 			contentID: "847373747",
-			payload: &CheckPermissionScheme{
-				Subject: &PermissionSubjectScheme{
+			payload: &model.CheckPermissionScheme{
+				Subject: &model.PermissionSubjectScheme{
 					Type:       "user",
 					Identifier: "5b86be50b8e3cb5895860d6d",
 				},
@@ -127,8 +128,8 @@ func TestContentPermissionService_Check(t *testing.T) {
 		{
 			name:      "CheckContentPermissionsWhenTheResponseBodyIsEmpty",
 			contentID: "847373747",
-			payload: &CheckPermissionScheme{
-				Subject: &PermissionSubjectScheme{
+			payload: &model.CheckPermissionScheme{
+				Subject: &model.PermissionSubjectScheme{
 					Type:       "user",
 					Identifier: "5b86be50b8e3cb5895860d6d",
 				},
diff --git a/confluence/contentProperties_test.go b/confluence/contentProperties_test.go
index 63f6a14..4ab8a03 100644
--- a/confluence/contentProperties_test.go
+++ b/confluence/contentProperties_test.go
@@ -3,6 +3,7 @@ package confluence
 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 TestContentPropertyService_Create(t *testing.T) {
 	testCases := []struct {
 		name               string
 		contentID          string
-		payload            *ContentPropertyPayloadScheme
+		payload            *model.ContentPropertyPayloadScheme
 		mockFile           string
 		wantHTTPMethod     string
 		endpoint           string
@@ -25,7 +26,7 @@ func TestContentPropertyService_Create(t *testing.T) {
 		{
 			name:      "CreateContentPropertyWhenTheParametersAreCorrect",
 			contentID: "9438383838383",
-			payload: &ContentPropertyPayloadScheme{
+			payload: &model.ContentPropertyPayloadScheme{
 				Key:   "key",
 				Value: "value",
 			},
@@ -40,7 +41,7 @@ func TestContentPropertyService_Create(t *testing.T) {
 		{
 			name:      "CreateContentPropertyWhenTheContentIDIsNotSet",
 			contentID: "",
-			payload: &ContentPropertyPayloadScheme{
+			payload: &model.ContentPropertyPayloadScheme{
 				Key:   "key",
 				Value: "value",
 			},
@@ -67,7 +68,7 @@ func TestContentPropertyService_Create(t *testing.T) {
 		{
 			name:      "CreateContentPropertyWhenTheContextIsNotSet",
 			contentID: "9438383838383",
-			payload: &ContentPropertyPayloadScheme{
+			payload: &model.ContentPropertyPayloadScheme{
 				Key:   "key",
 				Value: "value",
 			},
@@ -82,7 +83,7 @@ func TestContentPropertyService_Create(t *testing.T) {
 		{
 			name:      "CreateContentPropertyWhenTheParametersAreCorrect",
 			contentID: "9438383838383",
-			payload: &ContentPropertyPayloadScheme{
+			payload: &model.ContentPropertyPayloadScheme{
 				Key:   "key",
 				Value: "value",
 			},
@@ -97,7 +98,7 @@ func TestContentPropertyService_Create(t *testing.T) {
 		{
 			name:      "CreateContentPropertyWhenTheRequestMethodIsIncorrect",
 			contentID: "9438383838383",
-			payload: &ContentPropertyPayloadScheme{
+			payload: &model.ContentPropertyPayloadScheme{
 				Key:   "key",
 				Value: "value",
 			},
@@ -112,7 +113,7 @@ func TestContentPropertyService_Create(t *testing.T) {
 		{
 			name:      "CreateContentPropertyWhenTheStatusCodeIsIncorrect",
 			contentID: "9438383838383",
-			payload: &ContentPropertyPayloadScheme{
+			payload: &model.ContentPropertyPayloadScheme{
 				Key:   "key",
 				Value: "value",
 			},
diff --git a/confluence/content_test.go b/confluence/content_test.go
index 07baac6..f020b58 100644
--- a/confluence/content_test.go
+++ b/confluence/content_test.go
@@ -3,6 +3,7 @@ package confluence
 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 TestContentService_Create(t *testing.T) {
 
 	testCases := []struct {
 		name               string
-		payload            *ContentScheme
+		payload            *model.ContentScheme
 		mockFile           string
 		wantHTTPMethod     string
 		endpoint           string
@@ -24,12 +25,12 @@ func TestContentService_Create(t *testing.T) {
 	}{
 		{
 			name: "CreateContentWhenTheParametersAreCorrect",
-			payload: &ContentScheme{
+			payload: &model.ContentScheme{
 				Type:  "page", // Valid values: page, blogpost, comment
 				Title: "Confluence Page Title",
-				Space: &SpaceScheme{Key: "DUMMY"},
-				Body: &BodyScheme{
-					Storage: &BodyNodeScheme{
+				Space: &model.SpaceScheme{Key: "DUMMY"},
+				Body: &model.BodyScheme{
+					Storage: &model.BodyNodeScheme{
 						Value:          "<p>This is <br/> a new page</p>",
 						Representation: "storage",
 					},
@@ -56,12 +57,12 @@ func TestContentService_Create(t *testing.T) {
 
 		{
 			name: "CreateContentWhenTheRequestMethodIsIncorrect",
-			payload: &ContentScheme{
+			payload: &model.ContentScheme{
 				Type:  "page", // Valid values: page, blogpost, comment
 				Title: "Confluence Page Title",
-				Space: &SpaceScheme{Key: "DUMMY"},
-				Body: &BodyScheme{
-					Storage: &BodyNodeScheme{
+				Space: &model.SpaceScheme{Key: "DUMMY"},
+				Body: &model.BodyScheme{
+					Storage: &model.BodyNodeScheme{
 						Value:          "<p>This is <br/> a new page</p>",
 						Representation: "storage",
 					},
@@ -77,12 +78,12 @@ func TestContentService_Create(t *testing.T) {
 
 		{
 			name: "CreateContentWhenTheContextIsNotProvided",
-			payload: &ContentScheme{
+			payload: &model.ContentScheme{
 				Type:  "page", // Valid values: page, blogpost, comment
 				Title: "Confluence Page Title",
-				Space: &SpaceScheme{Key: "DUMMY"},
-				Body: &BodyScheme{
-					Storage: &BodyNodeScheme{
+				Space: &model.SpaceScheme{Key: "DUMMY"},
+				Body: &model.BodyScheme{
+					Storage: &model.BodyNodeScheme{
 						Value:          "<p>This is <br/> a new page</p>",
 						Representation: "storage",
 					},
@@ -98,12 +99,12 @@ func TestContentService_Create(t *testing.T) {
 
 		{
 			name: "CreateContentWhenTheRequestBodyIsEmpty",
-			payload: &ContentScheme{
+			payload: &model.ContentScheme{
 				Type:  "page", // Valid values: page, blogpost, comment
 				Title: "Confluence Page Title",
-				Space: &SpaceScheme{Key: "DUMMY"},
-				Body: &BodyScheme{
-					Storage: &BodyNodeScheme{
+				Space: &model.SpaceScheme{Key: "DUMMY"},
+				Body: &model.BodyScheme{
+					Storage: &model.BodyNodeScheme{
 						Value:          "<p>This is <br/> a new page</p>",
 						Representation: "storage",
 					},
@@ -189,7 +190,7 @@ func TestContentService_Gets(t *testing.T) {
 
 	testCases := []struct {
 		name                string
-		options             *GetContentOptionsScheme
+		options             *model.GetContentOptionsScheme
 		startAt, maxResults int
 		mockFile            string
 		wantHTTPMethod      string
@@ -200,7 +201,7 @@ func TestContentService_Gets(t *testing.T) {
 	}{
 		{
 			name: "GetsContentWhenTheAllOptionsAreProvided",
-			options: &GetContentOptionsScheme{
+			options: &model.GetContentOptionsScheme{
 				ContextType: "page",
 				SpaceKey:    "DUMMY",
 				Title:       "*page*",
@@ -222,7 +223,7 @@ func TestContentService_Gets(t *testing.T) {
 
 		{
 			name: "GetsContentWhenTheContextIsNotSet",
-			options: &GetContentOptionsScheme{
+			options: &model.GetContentOptionsScheme{
 				ContextType: "page",
 				SpaceKey:    "DUMMY",
 				Title:       "*page*",
@@ -244,7 +245,7 @@ func TestContentService_Gets(t *testing.T) {
 
 		{
 			name: "GetsContentWhenTheRequestMethodIsIncorrect",
-			options: &GetContentOptionsScheme{
+			options: &model.GetContentOptionsScheme{
 				ContextType: "page",
 				SpaceKey:    "DUMMY",
 				Title:       "*page*",
@@ -266,7 +267,7 @@ func TestContentService_Gets(t *testing.T) {
 
 		{
 			name: "GetsContentWhenTheResponseStatusIsIncorrect",
-			options: &GetContentOptionsScheme{
+			options: &model.GetContentOptionsScheme{
 				ContextType: "page",
 				SpaceKey:    "DUMMY",
 				Title:       "*page*",
@@ -288,7 +289,7 @@ func TestContentService_Gets(t *testing.T) {
 
 		{
 			name: "GetsContentWhenTheResponseBodyIsEmpty",
-			options: &GetContentOptionsScheme{
+			options: &model.GetContentOptionsScheme{
 				ContextType: "page",
 				SpaceKey:    "DUMMY",
 				Title:       "*page*",
@@ -720,7 +721,7 @@ func TestContentService_Update(t *testing.T) {
 	testCases := []struct {
 		name               string
 		contentID          string
-		payload            *ContentScheme
+		payload            *model.ContentScheme
 		mockFile           string
 		wantHTTPMethod     string
 		endpoint           string
@@ -731,17 +732,17 @@ func TestContentService_Update(t *testing.T) {
 		{
 			name:      "UpdateContentWhenTheParametersAreCorrect",
 			contentID: "2939332",
-			payload: &ContentScheme{
+			payload: &model.ContentScheme{
 				Type:  "page", // Valid values: page, blogpost, comment
 				Title: "Confluence Page Title",
-				Space: &SpaceScheme{Key: "DUMMY"},
-				Body: &BodyScheme{
-					Storage: &BodyNodeScheme{
+				Space: &model.SpaceScheme{Key: "DUMMY"},
+				Body: &model.BodyScheme{
+					Storage: &model.BodyNodeScheme{
 						Value:          "<p>This is <br/> a new page</p>",
 						Representation: "storage",
 					},
 				},
-				Version: &VersionScheme{Number: 2},
+				Version: &model.ContentVersionScheme{Number: 2},
 			},
 			mockFile:           "./mocks/get-content.json",
 			wantHTTPMethod:     http.MethodPut,
@@ -754,17 +755,17 @@ func TestContentService_Update(t *testing.T) {
 		{
 			name:      "UpdateContentWhenTheContentIDIsNotProvided",
 			contentID: "",
-			payload: &ContentScheme{
+			payload: &model.ContentScheme{
 				Type:  "page", // Valid values: page, blogpost, comment
 				Title: "Confluence Page Title",
-				Space: &SpaceScheme{Key: "DUMMY"},
-				Body: &BodyScheme{
-					Storage: &BodyNodeScheme{
+				Space: &model.SpaceScheme{Key: "DUMMY"},
+				Body: &model.BodyScheme{
+					Storage: &model.BodyNodeScheme{
 						Value:          "<p>This is <br/> a new page</p>",
 						Representation: "storage",
 					},
 				},
-				Version: &VersionScheme{Number: 2},
+				Version: &model.ContentVersionScheme{Number: 2},
 			},
 			mockFile:           "./mocks/get-content.json",
 			wantHTTPMethod:     http.MethodPut,
@@ -789,17 +790,17 @@ func TestContentService_Update(t *testing.T) {
 		{
 			name:      "UpdateContentWhenTheContentIsNotProvided",
 			contentID: "2939332",
-			payload: &ContentScheme{
+			payload: &model.ContentScheme{
 				Type:  "page", // Valid values: page, blogpost, comment
 				Title: "Confluence Page Title",
-				Space: &SpaceScheme{Key: "DUMMY"},
-				Body: &BodyScheme{
-					Storage: &BodyNodeScheme{
+				Space: &model.SpaceScheme{Key: "DUMMY"},
+				Body: &model.BodyScheme{
+					Storage: &model.BodyNodeScheme{
 						Value:          "<p>This is <br/> a new page</p>",
 						Representation: "storage",
 					},
 				},
-				Version: &VersionScheme{Number: 2},
+				Version: &model.ContentVersionScheme{Number: 2},
 			},
 			mockFile:           "./mocks/get-content.json",
 			wantHTTPMethod:     http.MethodPut,
@@ -812,17 +813,17 @@ func TestContentService_Update(t *testing.T) {
 		{
 			name:      "UpdateContentWhenTheRequestMethodIsIncorrect",
 			contentID: "2939332",
-			payload: &ContentScheme{
+			payload: &model.ContentScheme{
 				Type:  "page", // Valid values: page, blogpost, comment
 				Title: "Confluence Page Title",
-				Space: &SpaceScheme{Key: "DUMMY"},
-				Body: &BodyScheme{
-					Storage: &BodyNodeScheme{
+				Space: &model.SpaceScheme{Key: "DUMMY"},
+				Body: &model.BodyScheme{
+					Storage: &model.BodyNodeScheme{
 						Value:          "<p>This is <br/> a new page</p>",
 						Representation: "storage",
 					},
 				},
-				Version: &VersionScheme{Number: 2},
+				Version: &model.ContentVersionScheme{Number: 2},
 			},
 			mockFile:           "./mocks/get-content.json",
 			wantHTTPMethod:     http.MethodHead,
@@ -835,17 +836,17 @@ func TestContentService_Update(t *testing.T) {
 		{
 			name:      "UpdateContentWhenTheStatusCodeIsIncorrect",
 			contentID: "2939332",
-			payload: &ContentScheme{
+			payload: &model.ContentScheme{
 				Type:  "page", // Valid values: page, blogpost, comment
 				Title: "Confluence Page Title",
-				Space: &SpaceScheme{Key: "DUMMY"},
-				Body: &BodyScheme{
-					Storage: &BodyNodeScheme{
+				Space: &model.SpaceScheme{Key: "DUMMY"},
+				Body: &model.BodyScheme{
+					Storage: &model.BodyNodeScheme{
 						Value:          "<p>This is <br/> a new page</p>",
 						Representation: "storage",
 					},
 				},
-				Version: &VersionScheme{Number: 2},
+				Version: &model.ContentVersionScheme{Number: 2},
 			},
 			mockFile:           "./mocks/get-content.json",
 			wantHTTPMethod:     http.MethodPut,
@@ -858,17 +859,17 @@ func TestContentService_Update(t *testing.T) {
 		{
 			name:      "UpdateContentWhenTheResponseBodyIsEmpty",
 			contentID: "2939332",
-			payload: &ContentScheme{
+			payload: &model.ContentScheme{
 				Type:  "page", // Valid values: page, blogpost, comment
 				Title: "Confluence Page Title",
-				Space: &SpaceScheme{Key: "DUMMY"},
-				Body: &BodyScheme{
-					Storage: &BodyNodeScheme{
+				Space: &model.SpaceScheme{Key: "DUMMY"},
+				Body: &model.BodyScheme{
+					Storage: &model.BodyNodeScheme{
 						Value:          "<p>This is <br/> a new page</p>",
 						Representation: "storage",
 					},
 				},
-				Version: &VersionScheme{Number: 2},
+				Version: &model.ContentVersionScheme{Number: 2},
 			},
 			mockFile:           "./mocks/empty-json.json",
 			wantHTTPMethod:     http.MethodPut,
diff --git a/confluence/space_test.go b/confluence/space_test.go
index 38cbb14..676dab2 100644
--- a/confluence/space_test.go
+++ b/confluence/space_test.go
@@ -3,6 +3,7 @@ package confluence
 import (
 	"context"
 	"fmt"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"github.com/stretchr/testify/assert"
 	"net/http"
 	"net/url"
@@ -13,7 +14,7 @@ func TestSpaceService_Gets(t *testing.T) {
 
 	testCases := []struct {
 		name                string
-		options             *GetSpacesOptionScheme
+		options             *model.GetSpacesOptionScheme
 		startAt, maxResults int
 		mockFile            string
 		wantHTTPMethod      string
@@ -24,7 +25,7 @@ func TestSpaceService_Gets(t *testing.T) {
 	}{
 		{
 			name: "GetSpacesWhenTheParametersAreCorrect",
-			options: &GetSpacesOptionScheme{
+			options: &model.GetSpacesOptionScheme{
 				SpaceKeys:       []string{"DUMMY", "TEST"},
 				SpaceIDs:        []int{1111, 2222, 3333},
 				SpaceType:       "global",
@@ -46,7 +47,7 @@ func TestSpaceService_Gets(t *testing.T) {
 
 		{
 			name: "GetSpacesWhenTheContextIsNotProvided",
-			options: &GetSpacesOptionScheme{
+			options: &model.GetSpacesOptionScheme{
 				SpaceKeys:       []string{"DUMMY", "TEST"},
 				SpaceIDs:        []int{1111, 2222, 3333},
 				SpaceType:       "global",
@@ -68,7 +69,7 @@ func TestSpaceService_Gets(t *testing.T) {
 
 		{
 			name: "GetSpacesWhenTheRequestMethodIsIncorrect",
-			options: &GetSpacesOptionScheme{
+			options: &model.GetSpacesOptionScheme{
 				SpaceKeys:       []string{"DUMMY", "TEST"},
 				SpaceIDs:        []int{1111, 2222, 3333},
 				SpaceType:       "global",
@@ -90,7 +91,7 @@ func TestSpaceService_Gets(t *testing.T) {
 
 		{
 			name: "GetSpacesWhenTheStatusCodeIsIncorrect",
-			options: &GetSpacesOptionScheme{
+			options: &model.GetSpacesOptionScheme{
 				SpaceKeys:       []string{"DUMMY", "TEST"},
 				SpaceIDs:        []int{1111, 2222, 3333},
 				SpaceType:       "global",
@@ -112,7 +113,7 @@ func TestSpaceService_Gets(t *testing.T) {
 
 		{
 			name: "GetSpacesWhenTheResponseBodyIsEmpty",
-			options: &GetSpacesOptionScheme{
+			options: &model.GetSpacesOptionScheme{
 				SpaceKeys:       []string{"DUMMY", "TEST"},
 				SpaceIDs:        []int{1111, 2222, 3333},
 				SpaceType:       "global",
@@ -209,7 +210,7 @@ func TestSpaceService_Create(t *testing.T) {
 
 	testCases := []struct {
 		name               string
-		payload            *CreateSpaceScheme
+		payload            *model.CreateSpaceScheme
 		private            bool
 		mockFile           string
 		wantHTTPMethod     string
@@ -220,11 +221,11 @@ func TestSpaceService_Create(t *testing.T) {
 	}{
 		{
 			name: "CreateSpaceWhenTheParametersAreCorrect",
-			payload: &CreateSpaceScheme{
+			payload: &model.CreateSpaceScheme{
 				Key:  "DUM",
 				Name: "Dum Confluence Space",
-				Description: &CreateSpaceDescriptionScheme{
-					Plain: &CreateSpaceDescriptionPlainScheme{
+				Description: &model.CreateSpaceDescriptionScheme{
+					Plain: &model.CreateSpaceDescriptionPlainScheme{
 						Value:          "Confluence Space Description Sample",
 						Representation: "plain",
 					},
@@ -243,11 +244,11 @@ func TestSpaceService_Create(t *testing.T) {
 
 		{
 			name: "CreateSpaceWhenTheSpaceKeyIsNotProvided",
-			payload: &CreateSpaceScheme{
+			payload: &model.CreateSpaceScheme{
 				Key:  "",
 				Name: "Dum Confluence Space",
-				Description: &CreateSpaceDescriptionScheme{
-					Plain: &CreateSpaceDescriptionPlainScheme{
+				Description: &model.CreateSpaceDescriptionScheme{
+					Plain: &model.CreateSpaceDescriptionPlainScheme{
 						Value:          "Confluence Space Description Sample",
 						Representation: "plain",
 					},
@@ -266,11 +267,11 @@ func TestSpaceService_Create(t *testing.T) {
 
 		{
 			name: "CreateSpaceWhenTheSpaceNameIsNotProvided",
-			payload: &CreateSpaceScheme{
+			payload: &model.CreateSpaceScheme{
 				Key:  "DUM",
 				Name: "",
-				Description: &CreateSpaceDescriptionScheme{
-					Plain: &CreateSpaceDescriptionPlainScheme{
+				Description: &model.CreateSpaceDescriptionScheme{
+					Plain: &model.CreateSpaceDescriptionPlainScheme{
 						Value:          "Confluence Space Description Sample",
 						Representation: "plain",
 					},
@@ -301,11 +302,11 @@ func TestSpaceService_Create(t *testing.T) {
 
 		{
 			name: "CreateSpaceWhenTheContextIsNotProvided",
-			payload: &CreateSpaceScheme{
+			payload: &model.CreateSpaceScheme{
 				Key:  "DUM",
 				Name: "Dum Confluence Space",
-				Description: &CreateSpaceDescriptionScheme{
-					Plain: &CreateSpaceDescriptionPlainScheme{
+				Description: &model.CreateSpaceDescriptionScheme{
+					Plain: &model.CreateSpaceDescriptionPlainScheme{
 						Value:          "Confluence Space Description Sample",
 						Representation: "plain",
 					},
@@ -324,11 +325,11 @@ func TestSpaceService_Create(t *testing.T) {
 
 		{
 			name: "CreateSpaceWhenTheRequestMethodIsIncorrect",
-			payload: &CreateSpaceScheme{
+			payload: &model.CreateSpaceScheme{
 				Key:  "DUM",
 				Name: "Dum Confluence Space",
-				Description: &CreateSpaceDescriptionScheme{
-					Plain: &CreateSpaceDescriptionPlainScheme{
+				Description: &model.CreateSpaceDescriptionScheme{
+					Plain: &model.CreateSpaceDescriptionPlainScheme{
 						Value:          "Confluence Space Description Sample",
 						Representation: "plain",
 					},
@@ -347,11 +348,11 @@ func TestSpaceService_Create(t *testing.T) {
 
 		{
 			name: "CreateSpaceWhenTheStatusCodeIsIncorrect",
-			payload: &CreateSpaceScheme{
+			payload: &model.CreateSpaceScheme{
 				Key:  "DUM",
 				Name: "Dum Confluence Space",
-				Description: &CreateSpaceDescriptionScheme{
-					Plain: &CreateSpaceDescriptionPlainScheme{
+				Description: &model.CreateSpaceDescriptionScheme{
+					Plain: &model.CreateSpaceDescriptionPlainScheme{
 						Value:          "Confluence Space Description Sample",
 						Representation: "plain",
 					},
@@ -370,11 +371,11 @@ func TestSpaceService_Create(t *testing.T) {
 
 		{
 			name: "CreateSpaceWhenTheSpaceRequestedIsPrivate",
-			payload: &CreateSpaceScheme{
+			payload: &model.CreateSpaceScheme{
 				Key:  "DUM",
 				Name: "Dum Confluence Space",
-				Description: &CreateSpaceDescriptionScheme{
-					Plain: &CreateSpaceDescriptionPlainScheme{
+				Description: &model.CreateSpaceDescriptionScheme{
+					Plain: &model.CreateSpaceDescriptionPlainScheme{
 						Value:          "Confluence Space Description Sample",
 						Representation: "plain",
 					},
@@ -617,7 +618,7 @@ func TestSpaceService_Update(t *testing.T) {
 	testCases := []struct {
 		name               string
 		spaceKey           string
-		payload            *UpdateSpaceScheme
+		payload            *model.UpdateSpaceScheme
 		mockFile           string
 		wantHTTPMethod     string
 		endpoint           string
@@ -628,15 +629,15 @@ func TestSpaceService_Update(t *testing.T) {
 		{
 			name:     "UpdateSpaceWhenTheParametersAreCorrect",
 			spaceKey: "DUMMY",
-			payload: &UpdateSpaceScheme{
+			payload: &model.UpdateSpaceScheme{
 				Name: "DUMMY Space - Updated",
-				Description: &CreateSpaceDescriptionScheme{
-					Plain: &CreateSpaceDescriptionPlainScheme{
+				Description: &model.CreateSpaceDescriptionScheme{
+					Plain: &model.CreateSpaceDescriptionPlainScheme{
 						Value:          "Dummy Space - Description - Updated",
 						Representation: "plain",
 					},
 				},
-				Homepage: &UpdateSpaceHomepageScheme{ID: "65798145"},
+				Homepage: &model.UpdateSpaceHomepageScheme{ID: "65798145"},
 			},
 			mockFile:           "./mocks/get-space.json",
 			wantHTTPMethod:     http.MethodPut,
@@ -649,15 +650,15 @@ func TestSpaceService_Update(t *testing.T) {
 		{
 			name:     "UpdateSpaceWhenTheSpaceKeyIsNotProvided",
 			spaceKey: "",
-			payload: &UpdateSpaceScheme{
+			payload: &model.UpdateSpaceScheme{
 				Name: "DUMMY Space - Updated",
-				Description: &CreateSpaceDescriptionScheme{
-					Plain: &CreateSpaceDescriptionPlainScheme{
+				Description: &model.CreateSpaceDescriptionScheme{
+					Plain: &model.CreateSpaceDescriptionPlainScheme{
 						Value:          "Dummy Space - Description - Updated",
 						Representation: "plain",
 					},
 				},
-				Homepage: &UpdateSpaceHomepageScheme{ID: "65798145"},
+				Homepage: &model.UpdateSpaceHomepageScheme{ID: "65798145"},
 			},
 			mockFile:           "./mocks/get-space.json",
 			wantHTTPMethod:     http.MethodPut,
@@ -682,15 +683,15 @@ func TestSpaceService_Update(t *testing.T) {
 		{
 			name:     "UpdateSpaceWhenTheContextIsNotProvided",
 			spaceKey: "DUMMY",
-			payload: &UpdateSpaceScheme{
+			payload: &model.UpdateSpaceScheme{
 				Name: "DUMMY Space - Updated",
-				Description: &CreateSpaceDescriptionScheme{
-					Plain: &CreateSpaceDescriptionPlainScheme{
+				Description: &model.CreateSpaceDescriptionScheme{
+					Plain: &model.CreateSpaceDescriptionPlainScheme{
 						Value:          "Dummy Space - Description - Updated",
 						Representation: "plain",
 					},
 				},
-				Homepage: &UpdateSpaceHomepageScheme{ID: "65798145"},
+				Homepage: &model.UpdateSpaceHomepageScheme{ID: "65798145"},
 			},
 			mockFile:           "./mocks/get-space.json",
 			wantHTTPMethod:     http.MethodPut,
@@ -703,15 +704,15 @@ func TestSpaceService_Update(t *testing.T) {
 		{
 			name:     "UpdateSpaceWhenTheRequestMethodIsIncorrect",
 			spaceKey: "DUMMY",
-			payload: &UpdateSpaceScheme{
+			payload: &model.UpdateSpaceScheme{
 				Name: "DUMMY Space - Updated",
-				Description: &CreateSpaceDescriptionScheme{
-					Plain: &CreateSpaceDescriptionPlainScheme{
+				Description: &model.CreateSpaceDescriptionScheme{
+					Plain: &model.CreateSpaceDescriptionPlainScheme{
 						Value:          "Dummy Space - Description - Updated",
 						Representation: "plain",
 					},
 				},
-				Homepage: &UpdateSpaceHomepageScheme{ID: "65798145"},
+				Homepage: &model.UpdateSpaceHomepageScheme{ID: "65798145"},
 			},
 			mockFile:           "./mocks/get-space.json",
 			wantHTTPMethod:     http.MethodGet,
@@ -724,15 +725,15 @@ func TestSpaceService_Update(t *testing.T) {
 		{
 			name:     "UpdateSpaceWhenTheStatusCodeIsIncorrect",
 			spaceKey: "DUMMY",
-			payload: &UpdateSpaceScheme{
+			payload: &model.UpdateSpaceScheme{
 				Name: "DUMMY Space - Updated",
-				Description: &CreateSpaceDescriptionScheme{
-					Plain: &CreateSpaceDescriptionPlainScheme{
+				Description: &model.CreateSpaceDescriptionScheme{
+					Plain: &model.CreateSpaceDescriptionPlainScheme{
 						Value:          "Dummy Space - Description - Updated",
 						Representation: "plain",
 					},
 				},
-				Homepage: &UpdateSpaceHomepageScheme{ID: "65798145"},
+				Homepage: &model.UpdateSpaceHomepageScheme{ID: "65798145"},
 			},
 			mockFile:           "./mocks/get-space.json",
 			wantHTTPMethod:     http.MethodPut,
@@ -745,15 +746,15 @@ func TestSpaceService_Update(t *testing.T) {
 		{
 			name:     "UpdateSpaceWhenTheResponseBodyIsEmpty",
 			spaceKey: "DUMMY",
-			payload: &UpdateSpaceScheme{
+			payload: &model.UpdateSpaceScheme{
 				Name: "DUMMY Space - Updated",
-				Description: &CreateSpaceDescriptionScheme{
-					Plain: &CreateSpaceDescriptionPlainScheme{
+				Description: &model.CreateSpaceDescriptionScheme{
+					Plain: &model.CreateSpaceDescriptionPlainScheme{
 						Value:          "Dummy Space - Description - Updated",
 						Representation: "plain",
 					},
 				},
-				Homepage: &UpdateSpaceHomepageScheme{ID: "65798145"},
+				Homepage: &model.UpdateSpaceHomepageScheme{ID: "65798145"},
 			},
 			mockFile:           "./mocks/empty-json.json",
 			wantHTTPMethod:     http.MethodPut,