Repository: ctreminiom/go-atlassian
Pull request #228 (2023-07-29 05:44:01)

Feature/confluence http improvements


Patch:
diff --git a/confluence/api_client_impl.go b/confluence/api_client_impl.go
index 223bdae..7dc729b 100644
--- a/confluence/api_client_impl.go
+++ b/confluence/api_client_impl.go
@@ -11,7 +11,6 @@ import (
 	"io"
 	"net/http"
 	"net/url"
-	"reflect"
 	"strings"
 )
 
@@ -21,18 +20,22 @@ func New(httpClient common.HttpClient, site string) (*Client, error) {
 		httpClient = http.DefaultClient
 	}
 
+	if site == "" {
+		return nil, models.ErrNoSiteError
+	}
+
 	if !strings.HasSuffix(site, "/") {
 		site += "/"
 	}
 
-	siteAsURL, err := url.Parse(site)
+	u, err := url.Parse(site)
 	if err != nil {
 		return nil, err
 	}
 
 	client := &Client{
 		HTTP: httpClient,
-		Site: siteAsURL,
+		Site: u,
 	}
 
 	contentSubServices := &internal.ContentSubServices{
@@ -72,68 +75,58 @@ type Client struct {
 	Analytics *internal.AnalyticsService
 }
 
-func (c *Client) NewFormRequest(ctx context.Context, method, apiEndpoint, contentType string, payload io.Reader) (*http.Request, error) {
+func (c *Client) NewRequest(ctx context.Context, method, urlStr, type_ string, body interface{}) (*http.Request, error) {
 
-	relativePath, err := url.Parse(apiEndpoint)
+	rel, err := url.Parse(urlStr)
 	if err != nil {
 		return nil, err
 	}
 
-	var endpoint = c.Site.ResolveReference(relativePath).String()
-
-	request, err := http.NewRequestWithContext(ctx, method, endpoint, payload)
-	if err != nil {
-		return nil, err
-	}
-
-	request.Header.Add("Content-Type", contentType)
-	request.Header.Add("Accept", "application/json")
-	request.Header.Set("X-Atlassian-Token", "no-check")
-
-	if c.Auth.HasBasicAuth() {
-		request.SetBasicAuth(c.Auth.GetBasicAuth())
-	}
+	u := c.Site.ResolveReference(rel)
 
-	if c.Auth.HasUserAgent() {
-		request.Header.Set("User-Agent", c.Auth.GetUserAgent())
+	buf := new(bytes.Buffer)
+	if body != nil {
+		if err = json.NewEncoder(buf).Encode(body); err != nil {
+			return nil, err
+		}
 	}
 
-	if c.Auth.GetBearerToken() != "" {
-		request.Header.Add("Authorization", fmt.Sprintf("Bearer %v", c.Auth.GetBearerToken()))
+	// If the body interface is a *bytes.Buffer type
+	// it means the NewRequest() requires to handle the RFC 1867 ISO
+	if attachBuffer, ok := body.(*bytes.Buffer); ok {
+		buf = attachBuffer
 	}
 
-	return request, nil
-}
-
-func (c *Client) NewRequest(ctx context.Context, method, apiEndpoint string, payload io.Reader) (*http.Request, error) {
-
-	relativePath, err := url.Parse(apiEndpoint)
+	req, err := http.NewRequestWithContext(ctx, method, u.String(), buf)
 	if err != nil {
 		return nil, err
 	}
 
-	var endpoint = c.Site.ResolveReference(relativePath).String()
+	req.Header.Set("Accept", "application/json")
 
-	request, err := http.NewRequestWithContext(ctx, method, endpoint, payload)
-	if err != nil {
-		return nil, err
+	if body != nil {
+		req.Header.Set("Content-Type", "application/json")
 	}
 
-	request.Header.Set("Accept", "application/json")
-
-	if payload != nil {
-		request.Header.Set("Content-Type", "application/json")
+	if type_ != "" {
+		// When the type_ is provided, it means the request needs to be created to handle files
+		req.Header.Set("Content-Type", type_)
+		req.Header.Set("X-Atlassian-Token", "no-check")
 	}
 
 	if c.Auth.HasBasicAuth() {
-		request.SetBasicAuth(c.Auth.GetBasicAuth())
+		req.SetBasicAuth(c.Auth.GetBasicAuth())
 	}
 
 	if c.Auth.HasUserAgent() {
-		request.Header.Set("User-Agent", c.Auth.GetUserAgent())
+		req.Header.Set("User-Agent", c.Auth.GetUserAgent())
 	}
 
-	return request, nil
+	if c.Auth.GetBearerToken() != "" && !c.Auth.HasBasicAuth() {
+		req.Header.Add("Authorization", fmt.Sprintf("Bearer %v", c.Auth.GetBearerToken()))
+	}
+
+	return req, nil
 }
 
 func (c *Client) Call(request *http.Request, structure interface{}) (*models.ResponseScheme, error) {
@@ -143,12 +136,14 @@ func (c *Client) Call(request *http.Request, structure interface{}) (*models.Res
 		return nil, err
 	}
 
-	return c.TransformTheHTTPResponse(response, structure)
+	return c.processResponse(response, structure)
 }
 
-func (c *Client) TransformTheHTTPResponse(response *http.Response, structure interface{}) (*models.ResponseScheme, error) {
+func (c *Client) processResponse(response *http.Response, structure interface{}) (*models.ResponseScheme, error) {
+
+	defer response.Body.Close()
 
-	responseTransformed := &models.ResponseScheme{
+	res := &models.ResponseScheme{
 		Response: response,
 		Code:     response.StatusCode,
 		Endpoint: response.Request.URL.String(),
@@ -157,39 +152,39 @@ func (c *Client) TransformTheHTTPResponse(response *http.Response, structure int
 
 	responseAsBytes, err := io.ReadAll(response.Body)
 	if err != nil {
-		return responseTransformed, err
+		return res, err
 	}
 
-	responseTransformed.Bytes.Write(responseAsBytes)
+	res.Bytes.Write(responseAsBytes)
+
+	wasSuccess := response.StatusCode >= 200 && response.StatusCode < 300
 
-	var wasSuccess = response.StatusCode >= 200 && response.StatusCode < 300
 	if !wasSuccess {
-		return responseTransformed, models.ErrInvalidStatusCodeError
-	}
 
-	if structure != nil {
-		if err = json.Unmarshal(responseAsBytes, &structure); err != nil {
-			return responseTransformed, err
-		}
-	}
+		switch response.StatusCode {
 
-	return responseTransformed, nil
-}
+		case http.StatusNotFound:
+			return res, models.ErrNotFound
 
-func (c *Client) TransformStructToReader(structure interface{}) (io.Reader, error) {
+		case http.StatusUnauthorized:
+			return res, models.ErrUnauthorized
 
-	if structure == nil {
-		return nil, models.ErrNilPayloadError
-	}
+		case http.StatusInternalServerError:
+			return res, models.ErrInternalError
+
+		case http.StatusBadRequest:
+			return res, models.ErrBadRequestError
 
-	if reflect.ValueOf(structure).Type().Kind() == reflect.Struct {
-		return nil, models.ErrNonPayloadPointerError
+		default:
+			return res, models.ErrInvalidStatusCodeError
+		}
 	}
 
-	structureAsBodyBytes, err := json.Marshal(structure)
-	if err != nil {
-		return nil, err
+	if structure != nil {
+		if err = json.Unmarshal(responseAsBytes, &structure); err != nil {
+			return res, err
+		}
 	}
 
-	return bytes.NewReader(structureAsBodyBytes), nil
+	return res, nil
 }
diff --git a/confluence/internal/analytics_impl.go b/confluence/internal/analytics_impl.go
index 32b8fa6..b1b725e 100644
--- a/confluence/internal/analytics_impl.go
+++ b/confluence/internal/analytics_impl.go
@@ -11,7 +11,7 @@ import (
 	"strings"
 )
 
-func NewAnalyticsService(client service.Client) *AnalyticsService {
+func NewAnalyticsService(client service.Connector) *AnalyticsService {
 
 	return &AnalyticsService{
 		internalClient: &internalAnalyticsServiceImpl{c: client},
@@ -41,7 +41,7 @@ func (a *AnalyticsService) Distinct(ctx context.Context, contentId, fromDate str
 }
 
 type internalAnalyticsServiceImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalAnalyticsServiceImpl) Get(ctx context.Context, contentId, fromDate string) (*model.ContentViewScheme, *model.ResponseScheme, error) {
@@ -60,7 +60,7 @@ func (i *internalAnalyticsServiceImpl) Get(ctx context.Context, contentId, fromD
 		endpoint.WriteString(fmt.Sprintf("?%v", query.Encode()))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -90,7 +90,7 @@ func (i *internalAnalyticsServiceImpl) Distinct(ctx context.Context, contentId,
 		endpoint.WriteString(fmt.Sprintf("?%v", query.Encode()))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/confluence/internal/attachment_content_impl.go b/confluence/internal/attachment_content_impl.go
index 3801a5d..d3d64c2 100644
--- a/confluence/internal/attachment_content_impl.go
+++ b/confluence/internal/attachment_content_impl.go
@@ -15,7 +15,7 @@ import (
 	"strings"
 )
 
-func NewContentAttachmentService(client service.Client) *ContentAttachmentService {
+func NewContentAttachmentService(client service.Connector) *ContentAttachmentService {
 
 	return &ContentAttachmentService{
 		internalClient: &internalContentAttachmentImpl{c: client},
@@ -64,7 +64,7 @@ func (a *ContentAttachmentService) Create(ctx context.Context, attachmentID, sta
 }
 
 type internalContentAttachmentImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalContentAttachmentImpl) Gets(ctx context.Context, contentID string, startAt, maxResults int, options *model.GetContentAttachmentsOptionsScheme) (*model.ContentPageScheme, *model.ResponseScheme, error) {
@@ -95,7 +95,7 @@ func (i *internalContentAttachmentImpl) Gets(ctx context.Context, contentID stri
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/child/attachment?%v", contentID, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -152,7 +152,7 @@ func (i *internalContentAttachmentImpl) CreateOrUpdate(ctx context.Context, atta
 
 	writer.Close()
 
-	request, err := i.c.NewFormRequest(ctx, http.MethodPut, endpoint.String(), writer.FormDataContentType(), reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPut, endpoint.String(), writer.FormDataContentType(), reader)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -209,7 +209,7 @@ func (i *internalContentAttachmentImpl) Create(ctx context.Context, attachmentID
 
 	writer.Close()
 
-	request, err := i.c.NewFormRequest(ctx, http.MethodPost, endpoint.String(), writer.FormDataContentType(), reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint.String(), writer.FormDataContentType(), reader)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/confluence/internal/attachment_impl.go b/confluence/internal/attachment_impl.go
index e405ace..0f4319b 100644
--- a/confluence/internal/attachment_impl.go
+++ b/confluence/internal/attachment_impl.go
@@ -13,7 +13,7 @@ import (
 )
 
 // NewAttachmentService returns a new Confluence V2 Page service
-func NewAttachmentService(client service.Client) *AttachmentService {
+func NewAttachmentService(client service.Connector) *AttachmentService {
 	return &AttachmentService{
 		internalClient: &internalAttachmentImpl{c: client},
 	}
@@ -52,7 +52,7 @@ func (a *AttachmentService) Gets(ctx context.Context, entityID int, entityType s
 }
 
 type internalAttachmentImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalAttachmentImpl) Get(ctx context.Context, attachmentID string, versionID int, serializeIDs bool) (*model.AttachmentScheme, *model.ResponseScheme, error) {
@@ -77,7 +77,7 @@ func (i *internalAttachmentImpl) Get(ctx context.Context, attachmentID string, v
 		endpoint.WriteString(fmt.Sprintf("?%v", query.Encode()))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -139,7 +139,7 @@ func (i *internalAttachmentImpl) Gets(ctx context.Context, entityID int, entityT
 
 	endpoint := fmt.Sprintf("wiki/api/v2/%v/%v/attachments?%v", entityType, entityID, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/confluence/internal/authentication_impl.go b/confluence/internal/authentication_impl.go
index dcbda35..2bbe9ab 100644
--- a/confluence/internal/authentication_impl.go
+++ b/confluence/internal/authentication_impl.go
@@ -5,12 +5,12 @@ import (
 	"github.com/ctreminiom/go-atlassian/service/common"
 )
 
-func NewAuthenticationService(client service.Client) common.Authentication {
+func NewAuthenticationService(client service.Connector) common.Authentication {
 	return &AuthenticationService{c: client}
 }
 
 type AuthenticationService struct {
-	c service.Client
+	c service.Connector
 
 	basicAuthProvided bool
 	mail, token       string
@@ -26,7 +26,6 @@ func (a *AuthenticationService) SetBearerToken(token string) {
 func (a *AuthenticationService) GetBearerToken() string {
 	return a.token
 }
-
 func (a *AuthenticationService) SetExperimentalFlag() {}
 
 func (a *AuthenticationService) HasSetExperimentalFlag() bool {
diff --git a/confluence/internal/children_descendants_content_impl.go b/confluence/internal/children_descendants_content_impl.go
index 1c7a48f..da46d8e 100644
--- a/confluence/internal/children_descendants_content_impl.go
+++ b/confluence/internal/children_descendants_content_impl.go
@@ -12,7 +12,7 @@ import (
 	"strings"
 )
 
-func NewChildrenDescandantsService(client service.Client) *ChildrenDescandantsService {
+func NewChildrenDescandantsService(client service.Connector) *ChildrenDescandantsService {
 
 	return &ChildrenDescandantsService{
 		internalClient: &internalChildrenDescandantsImpl{c: client},
@@ -67,7 +67,7 @@ func (c *ChildrenDescandantsService) Move(ctx context.Context, pageID string, po
 
 // ChildrenByType returns all children of a given type, for a piece of content.
 //
-// A piece of content has different types of child content
+// # A piece of content has different types of child content
 //
 // GET /wiki/rest/api/content/{id}/child/{type}
 //
@@ -143,7 +143,7 @@ func (c *ChildrenDescandantsService) CopyPage(ctx context.Context, contentID str
 }
 
 type internalChildrenDescandantsImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalChildrenDescandantsImpl) Children(ctx context.Context, contentID string, expand []string, parentVersion int) (*model.ContentChildrenScheme, *model.ResponseScheme, error) {
@@ -169,7 +169,7 @@ func (i *internalChildrenDescandantsImpl) Children(ctx context.Context, contentI
 		endpoint.WriteString(fmt.Sprintf("?%v", query.Encode()))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -188,12 +188,15 @@ func (i *internalChildrenDescandantsImpl) Move(ctx context.Context, pageID strin
 	if pageID == "" {
 		return nil, nil, model.ErrNoPageIDError
 	}
+
 	if position == "" {
 		return nil, nil, model.ErrNoPositionError
 	}
+
 	if targetID == "" {
 		return nil, nil, model.ErrNoTargetIDError
 	}
+
 	_, validPosition := model.ValidPositions[position]
 	if !validPosition {
 		return nil, nil, model.ErrInvalidPositionError
@@ -202,7 +205,7 @@ func (i *internalChildrenDescandantsImpl) Move(ctx context.Context, pageID strin
 	var endpoint strings.Builder
 	endpoint.WriteString(fmt.Sprintf("wiki/rest/api/content/%v/move/%s/%v", pageID, position, targetID))
 
-	request, err := i.c.NewRequest(ctx, http.MethodPut, endpoint.String(), nil)
+	request, err := i.c.NewRequest(ctx, http.MethodPut, endpoint.String(), "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -240,7 +243,7 @@ func (i *internalChildrenDescandantsImpl) ChildrenByType(ctx context.Context, co
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/child/%v?%v", contentID, contentType, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -273,7 +276,7 @@ func (i *internalChildrenDescandantsImpl) Descendants(ctx context.Context, conte
 		endpoint.WriteString(fmt.Sprintf("?%v", query.Encode()))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -311,7 +314,7 @@ func (i *internalChildrenDescandantsImpl) DescendantsByType(ctx context.Context,
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/descendant/%v?%v", contentID, contentType, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -331,14 +334,9 @@ func (i *internalChildrenDescandantsImpl) CopyHierarchy(ctx context.Context, con
 		return nil, nil, model.ErrNoContentIDError
 	}
 
-	reader, err := i.c.TransformStructToReader(options)
-	if err != nil {
-		return nil, nil, err
-	}
-
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/pagehierarchy/copy", contentID)
 
-	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint, reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint, "", options)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -368,12 +366,7 @@ func (i *internalChildrenDescandantsImpl) CopyPage(ctx context.Context, contentI
 		endpoint.WriteString(fmt.Sprintf("?%v", query.Encode()))
 	}
 
-	reader, err := i.c.TransformStructToReader(options)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint.String(), reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint.String(), "", options)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/confluence/internal/comment_content_impl.go b/confluence/internal/comment_content_impl.go
index e0fea54..a55ce53 100644
--- a/confluence/internal/comment_content_impl.go
+++ b/confluence/internal/comment_content_impl.go
@@ -12,7 +12,7 @@ import (
 	"strings"
 )
 
-func NewCommentService(client service.Client) *CommentService {
+func NewCommentService(client service.Connector) *CommentService {
 
 	return &CommentService{
 		internalClient: &internalCommentImpl{c: client},
@@ -33,7 +33,7 @@ func (c *CommentService) Gets(ctx context.Context, contentID string, expand, loc
 }
 
 type internalCommentImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalCommentImpl) Gets(ctx context.Context, contentID string, expand, location []string, startAt, maxResults int) (*model.ContentPageScheme, *model.ResponseScheme, error) {
@@ -56,7 +56,7 @@ func (i *internalCommentImpl) Gets(ctx context.Context, contentID string, expand
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/child/comment?%v", contentID, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/confluence/internal/content_impl.go b/confluence/internal/content_impl.go
index 1d17c31..54fb304 100644
--- a/confluence/internal/content_impl.go
+++ b/confluence/internal/content_impl.go
@@ -23,7 +23,7 @@ type ContentSubServices struct {
 	Version            *VersionService
 }
 
-func NewContentService(client service.Client, subServices *ContentSubServices) *ContentService {
+func NewContentService(client service.Connector, subServices *ContentSubServices) *ContentService {
 
 	return &ContentService{
 		internalClient:     &internalContentImpl{c: client},
@@ -147,7 +147,7 @@ func (c *ContentService) Archive(ctx context.Context, payload *model.ContentArch
 }
 
 type internalContentImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalContentImpl) Gets(ctx context.Context, options *model.GetContentOptionsScheme, startAt, maxResults int) (*model.ContentPageScheme, *model.ResponseScheme, error) {
@@ -194,7 +194,7 @@ func (i *internalContentImpl) Gets(ctx context.Context, options *model.GetConten
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content?%v", query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -210,14 +210,9 @@ func (i *internalContentImpl) Gets(ctx context.Context, options *model.GetConten
 
 func (i *internalContentImpl) Create(ctx context.Context, payload *model.ContentScheme) (*model.ContentScheme, *model.ResponseScheme, error) {
 
-	reader, err := i.c.TransformStructToReader(payload)
-	if err != nil {
-		return nil, nil, err
-	}
-
 	endpoint := "wiki/rest/api/content"
 
-	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint, reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint, "", payload)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -255,7 +250,7 @@ func (i *internalContentImpl) Search(ctx context.Context, cql, cqlContext string
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/search?%v", query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -284,7 +279,7 @@ func (i *internalContentImpl) Get(ctx context.Context, contentID string, expand
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v?%v", contentID, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -304,14 +299,9 @@ func (i *internalContentImpl) Update(ctx context.Context, contentID string, payl
 		return nil, nil, model.ErrNoContentIDError
 	}
 
-	reader, err := i.c.TransformStructToReader(payload)
-	if err != nil {
-		return nil, nil, err
-	}
-
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v", contentID)
 
-	request, err := i.c.NewRequest(ctx, http.MethodPut, endpoint, reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPut, endpoint, "", payload)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -341,7 +331,7 @@ func (i *internalContentImpl) Delete(ctx context.Context, contentID, status stri
 		endpoint.WriteString(fmt.Sprintf("?%v", query.Encode()))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint.String(), nil)
+	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint.String(), "", nil)
 	if err != nil {
 		return nil, err
 	}
@@ -365,7 +355,7 @@ func (i *internalContentImpl) History(ctx context.Context, contentID string, exp
 		endpoint.WriteString(fmt.Sprintf("?%v", query.Encode()))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -381,14 +371,9 @@ func (i *internalContentImpl) History(ctx context.Context, contentID string, exp
 
 func (i *internalContentImpl) Archive(ctx context.Context, payload *model.ContentArchivePayloadScheme) (*model.ContentArchiveResultScheme, *model.ResponseScheme, error) {
 
-	reader, err := i.c.TransformStructToReader(payload)
-	if err != nil {
-		return nil, nil, err
-	}
-
 	endpoint := "wiki/rest/api/content/archive"
 
-	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint, reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint, "", payload)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/confluence/internal/label_content_impl.go b/confluence/internal/label_content_impl.go
index 4172bf0..1a726b7 100644
--- a/confluence/internal/label_content_impl.go
+++ b/confluence/internal/label_content_impl.go
@@ -12,7 +12,7 @@ import (
 	"strings"
 )
 
-func NewContentLabelService(client service.Client) *ContentLabelService {
+func NewContentLabelService(client service.Connector) *ContentLabelService {
 
 	return &ContentLabelService{
 		internalClient: &internalContentLabelImpl{c: client},
@@ -51,7 +51,7 @@ func (c *ContentLabelService) Remove(ctx context.Context, contentID, labelName s
 }
 
 type internalContentLabelImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalContentLabelImpl) Gets(ctx context.Context, contentID, prefix string, startAt, maxResults int) (*model.ContentLabelPageScheme, *model.ResponseScheme, error) {
@@ -70,7 +70,7 @@ func (i *internalContentLabelImpl) Gets(ctx context.Context, contentID, prefix s
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/label?%v", contentID, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -90,11 +90,6 @@ func (i *internalContentLabelImpl) Add(ctx context.Context, contentID string, pa
 		return nil, nil, model.ErrNoContentIDError
 	}
 
-	reader, err := i.c.TransformStructToReader(payload)
-	if err != nil {
-		return nil, nil, err
-	}
-
 	var endpoint strings.Builder
 	endpoint.WriteString(fmt.Sprintf("wiki/rest/api/content/%v/label", contentID))
 
@@ -105,7 +100,7 @@ func (i *internalContentLabelImpl) Add(ctx context.Context, contentID string, pa
 		endpoint.WriteString(fmt.Sprintf("?%v", query.Encode()))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint.String(), reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint.String(), "", payload)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -131,7 +126,7 @@ func (i *internalContentLabelImpl) Remove(ctx context.Context, contentID, labelN
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/label/%v", contentID, labelName)
 
-	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint, "", nil)
 	if err != nil {
 		return nil, err
 	}
diff --git a/confluence/internal/label_impl.go b/confluence/internal/label_impl.go
index 2898475..a8e25c6 100644
--- a/confluence/internal/label_impl.go
+++ b/confluence/internal/label_impl.go
@@ -11,7 +11,7 @@ import (
 	"strconv"
 )
 
-func NewLabelService(client service.Client) *LabelService {
+func NewLabelService(client service.Connector) *LabelService {
 
 	return &LabelService{
 		internalClient: &internalLabelImpl{c: client},
@@ -32,7 +32,7 @@ func (l *LabelService) Get(ctx context.Context, labelName, labelType string, sta
 }
 
 type internalLabelImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalLabelImpl) Get(ctx context.Context, labelName, labelType string, start, limit int) (*model.LabelDetailsScheme, *model.ResponseScheme, error) {
@@ -49,7 +49,7 @@ func (i *internalLabelImpl) Get(ctx context.Context, labelName, labelType string
 
 	endpoint := fmt.Sprintf("wiki/rest/api/label?%v", query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/confluence/internal/page_impl.go b/confluence/internal/page_impl.go
index 9336c02..b084a55 100644
--- a/confluence/internal/page_impl.go
+++ b/confluence/internal/page_impl.go
@@ -13,10 +13,8 @@ import (
 )
 
 // NewPageService returns a new Confluence V2 Page service
-func NewPageService(client service.Client) *PageService {
-	return &PageService{
-		internalClient: &internalPageImpl{c: client},
-	}
+func NewPageService(client service.Connector) *PageService {
+	return &PageService{internalClient: &internalPageImpl{c: client}}
 }
 
 type PageService struct {
@@ -116,7 +114,7 @@ func (p *PageService) Delete(ctx context.Context, pageID int) (*model.ResponseSc
 }
 
 type internalPageImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalPageImpl) Get(ctx context.Context, pageID int, format string, draft bool, version int) (*model.PageScheme, *model.ResponseScheme, error) {
@@ -141,7 +139,7 @@ func (i *internalPageImpl) Get(ctx context.Context, pageID int, format string, d
 
 	endpoint := fmt.Sprintf("wiki/api/v2/pages/%v?%v", pageID, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -186,7 +184,7 @@ func (i *internalPageImpl) BulkFiltered(ctx context.Context, status, format, cur
 
 	endpoint := fmt.Sprintf("wiki/api/v2/pages?%v", query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -219,7 +217,7 @@ func (i *internalPageImpl) GetsByLabel(ctx context.Context, labelID int, sort, c
 
 	endpoint := fmt.Sprintf("wiki/api/v2/labels/%v/pages?%v", labelID, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -248,7 +246,7 @@ func (i *internalPageImpl) GetsBySpace(ctx context.Context, spaceID int, cursor
 
 	endpoint := fmt.Sprintf("wiki/api/v2/spaces/%v/pages?%v", spaceID, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -264,14 +262,9 @@ func (i *internalPageImpl) GetsBySpace(ctx context.Context, spaceID int, cursor
 
 func (i *internalPageImpl) Create(ctx context.Context, payload *model.PageCreatePayloadScheme) (*model.PageScheme, *model.ResponseScheme, error) {
 
-	reader, err := i.c.TransformStructToReader(payload)
-	if err != nil {
-		return nil, nil, err
-	}
-
 	endpoint := "wiki/api/v2/pages"
 
-	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint, reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint, "", payload)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -291,14 +284,9 @@ func (i *internalPageImpl) Update(ctx context.Context, pageID int, payload *mode
 		return nil, nil, model.ErrNoPageIDError
 	}
 
-	reader, err := i.c.TransformStructToReader(payload)
-	if err != nil {
-		return nil, nil, err
-	}
-
 	endpoint := fmt.Sprintf("wiki/api/v2/pages/%v", pageID)
 
-	request, err := i.c.NewRequest(ctx, http.MethodPut, endpoint, reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPut, endpoint, "", payload)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -320,7 +308,7 @@ func (i *internalPageImpl) Delete(ctx context.Context, pageID int) (*model.Respo
 
 	endpoint := fmt.Sprintf("wiki/api/v2/pages/%v", pageID)
 
-	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint, "", nil)
 	if err != nil {
 		return nil, err
 	}
diff --git a/confluence/internal/permission_content_impl.go b/confluence/internal/permission_content_impl.go
index e59e01a..e71a1f2 100644
--- a/confluence/internal/permission_content_impl.go
+++ b/confluence/internal/permission_content_impl.go
@@ -9,7 +9,7 @@ import (
 	"net/http"
 )
 
-func NewPermissionService(client service.Client) *PermissionService {
+func NewPermissionService(client service.Connector) *PermissionService {
 
 	return &PermissionService{
 		internalClient: &internalPermissionImpl{c: client},
@@ -43,7 +43,7 @@ func (p *PermissionService) Check(ctx context.Context, contentID string, payload
 }
 
 type internalPermissionImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalPermissionImpl) Check(ctx context.Context, contentID string, payload *model.CheckPermissionScheme) (*model.PermissionCheckResponseScheme, *model.ResponseScheme, error) {
@@ -52,14 +52,9 @@ func (i *internalPermissionImpl) Check(ctx context.Context, contentID string, pa
 		return nil, nil, model.ErrNoContentIDError
 	}
 
-	reader, err := i.c.TransformStructToReader(payload)
-	if err != nil {
-		return nil, nil, err
-	}
-
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/permission/check", contentID)
 
-	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint, reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint, "", payload)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/confluence/internal/permission_space_impl.go b/confluence/internal/permission_space_impl.go
index d5ff020..64431d2 100644
--- a/confluence/internal/permission_space_impl.go
+++ b/confluence/internal/permission_space_impl.go
@@ -9,7 +9,7 @@ import (
 	"net/http"
 )
 
-func NewSpacePermissionService(client service.Client) *SpacePermissionService {
+func NewSpacePermissionService(client service.Connector) *SpacePermissionService {
 
 	return &SpacePermissionService{
 		internalClient: &internalSpacePermissionImpl{c: client},
@@ -58,7 +58,7 @@ func (s *SpacePermissionService) Remove(ctx context.Context, spaceKey string, pe
 }
 
 type internalSpacePermissionImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalSpacePermissionImpl) Add(ctx context.Context, spaceKey string, payload *model.SpacePermissionPayloadScheme) (*model.SpacePermissionV2Scheme, *model.ResponseScheme, error) {
@@ -67,14 +67,9 @@ func (i *internalSpacePermissionImpl) Add(ctx context.Context, spaceKey string,
 		return nil, nil, model.ErrNoSpaceKeyError
 	}
 
-	reader, err := i.c.TransformStructToReader(payload)
-	if err != nil {
-		return nil, nil, err
-	}
-
 	endpoint := fmt.Sprintf("wiki/rest/api/space/%v/permission", spaceKey)
 
-	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint, reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint, "", payload)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -94,14 +89,9 @@ func (i *internalSpacePermissionImpl) Bulk(ctx context.Context, spaceKey string,
 		return nil, model.ErrNoSpaceKeyError
 	}
 
-	reader, err := i.c.TransformStructToReader(payload)
-	if err != nil {
-		return nil, err
-	}
-
 	endpoint := fmt.Sprintf("wiki/rest/api/space/%v/permission/custom-content", spaceKey)
 
-	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint, reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint, "", payload)
 	if err != nil {
 		return nil, err
 	}
@@ -117,7 +107,7 @@ func (i *internalSpacePermissionImpl) Remove(ctx context.Context, spaceKey strin
 
 	endpoint := fmt.Sprintf("wiki/rest/api/space/%v/permission/%v", spaceKey, permissionID)
 
-	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint, "", nil)
 	if err != nil {
 		return nil, err
 	}
diff --git a/confluence/internal/properties_content_impl.go b/confluence/internal/properties_content_impl.go
index 513eaba..3ef7d80 100644
--- a/confluence/internal/properties_content_impl.go
+++ b/confluence/internal/properties_content_impl.go
@@ -12,7 +12,7 @@ import (
 	"strings"
 )
 
-func NewPropertyService(client service.Client) *PropertyService {
+func NewPropertyService(client service.Connector) *PropertyService {
 
 	return &PropertyService{
 		internalClient: &internalPropertyImpl{c: client},
@@ -60,7 +60,7 @@ func (p *PropertyService) Delete(ctx context.Context, contentID, key string) (*m
 }
 
 type internalPropertyImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalPropertyImpl) Gets(ctx context.Context, contentID string, expand []string, startAt, maxResults int) (*model.ContentPropertyPageScheme, *model.ResponseScheme, error) {
@@ -79,7 +79,7 @@ func (i *internalPropertyImpl) Gets(ctx context.Context, contentID string, expan
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/property?%v", contentID, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -99,14 +99,9 @@ func (i *internalPropertyImpl) Create(ctx context.Context, contentID string, pay
 		return nil, nil, model.ErrNoContentIDError
 	}
 
-	reader, err := i.c.TransformStructToReader(payload)
-	if err != nil {
-		return nil, nil, err
-	}
-
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/property", contentID)
 
-	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint, reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint, "", payload)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -132,7 +127,7 @@ func (i *internalPropertyImpl) Get(ctx context.Context, contentID, key string) (
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/property/%v", contentID, key)
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -158,7 +153,7 @@ func (i *internalPropertyImpl) Delete(ctx context.Context, contentID, key string
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/property/%v", contentID, key)
 
-	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint, "", nil)
 	if err != nil {
 		return nil, err
 	}
diff --git a/confluence/internal/restriction_content_impl.go b/confluence/internal/restriction_content_impl.go
index 3d3067c..60f7bb4 100644
--- a/confluence/internal/restriction_content_impl.go
+++ b/confluence/internal/restriction_content_impl.go
@@ -12,7 +12,7 @@ import (
 	"strings"
 )
 
-func NewRestrictionService(client service.Client, operation *RestrictionOperationService) *RestrictionService {
+func NewRestrictionService(client service.Connector, operation *RestrictionOperationService) *RestrictionService {
 
 	return &RestrictionService{
 		internalClient: &internalRestrictionImpl{c: client},
@@ -62,7 +62,7 @@ func (r *RestrictionService) Update(ctx context.Context, contentID string, paylo
 }
 
 type internalRestrictionImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalRestrictionImpl) Gets(ctx context.Context, contentID string, expand []string, startAt, maxResults int) (*model.ContentRestrictionPageScheme, *model.ResponseScheme, error) {
@@ -81,7 +81,7 @@ func (i *internalRestrictionImpl) Gets(ctx context.Context, contentID string, ex
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/restriction?%v", contentID, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -101,11 +101,6 @@ func (i *internalRestrictionImpl) Add(ctx context.Context, contentID string, pay
 		return nil, nil, model.ErrNoContentIDError
 	}
 
-	reader, err := i.c.TransformStructToReader(payload)
-	if err != nil {
-		return nil, nil, err
-	}
-
 	var endpoint strings.Builder
 	endpoint.WriteString(fmt.Sprintf("wiki/rest/api/content/%v/restriction", contentID))
 
@@ -116,7 +111,7 @@ func (i *internalRestrictionImpl) Add(ctx context.Context, contentID string, pay
 		endpoint.WriteString(fmt.Sprintf("?%v", query.Encode()))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint.String(), reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint.String(), "", payload)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -146,7 +141,7 @@ func (i *internalRestrictionImpl) Delete(ctx context.Context, contentID string,
 		endpoint.WriteString(fmt.Sprintf("?%v", query.Encode()))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint.String(), nil)
+	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint.String(), "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -166,11 +161,6 @@ func (i *internalRestrictionImpl) Update(ctx context.Context, contentID string,
 		return nil, nil, model.ErrNoContentIDError
 	}
 
-	reader, err := i.c.TransformStructToReader(payload)
-	if err != nil {
-		return nil, nil, err
-	}
-
 	var endpoint strings.Builder
 	endpoint.WriteString(fmt.Sprintf("wiki/rest/api/content/%v/restriction", contentID))
 
@@ -181,7 +171,7 @@ func (i *internalRestrictionImpl) Update(ctx context.Context, contentID string,
 		endpoint.WriteString(fmt.Sprintf("?%v", query.Encode()))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodPut, endpoint.String(), reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPut, endpoint.String(), "", payload)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/confluence/internal/restriction_operation_content_impl.go b/confluence/internal/restriction_operation_content_impl.go
index fd1d06d..d014dbe 100644
--- a/confluence/internal/restriction_operation_content_impl.go
+++ b/confluence/internal/restriction_operation_content_impl.go
@@ -12,7 +12,7 @@ import (
 	"strings"
 )
 
-func NewRestrictionOperationService(client service.Client, group *RestrictionOperationGroupService, user *RestrictionOperationUserService) *RestrictionOperationService {
+func NewRestrictionOperationService(client service.Connector, group *RestrictionOperationGroupService, user *RestrictionOperationUserService) *RestrictionOperationService {
 
 	return &RestrictionOperationService{
 		internalClient: &internalRestrictionOperationImpl{c: client},
@@ -29,7 +29,7 @@ type RestrictionOperationService struct {
 
 // Gets returns restrictions on a piece of content by operation.
 //
-// This method is similar to Get restrictions except that the operations are properties
+// # This method is similar to Get restrictions except that the operations are properties
 //
 // of the return object, rather than items in a results array.
 //
@@ -50,7 +50,7 @@ func (r *RestrictionOperationService) Get(ctx context.Context, contentID, operat
 }
 
 type internalRestrictionOperationImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalRestrictionOperationImpl) Gets(ctx context.Context, contentID string, expand []string) (*model.ContentRestrictionByOperationScheme, *model.ResponseScheme, error) {
@@ -69,7 +69,7 @@ func (i *internalRestrictionOperationImpl) Gets(ctx context.Context, contentID s
 		endpoint.WriteString(fmt.Sprintf("?%v", query.Encode()))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -103,7 +103,7 @@ func (i *internalRestrictionOperationImpl) Get(ctx context.Context, contentID, o
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/restriction/byOperation/%v?%v", contentID, operationKey, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/confluence/internal/restriction_operation_group_content_impl.go b/confluence/internal/restriction_operation_group_content_impl.go
index 7c910b7..5211cce 100644
--- a/confluence/internal/restriction_operation_group_content_impl.go
+++ b/confluence/internal/restriction_operation_group_content_impl.go
@@ -11,7 +11,7 @@ import (
 	"strings"
 )
 
-func NewRestrictionOperationGroupService(client service.Client) *RestrictionOperationGroupService {
+func NewRestrictionOperationGroupService(client service.Connector) *RestrictionOperationGroupService {
 
 	return &RestrictionOperationGroupService{
 		internalClient: &internalRestrictionOperationGroupImpl{c: client},
@@ -58,7 +58,7 @@ func (r *RestrictionOperationGroupService) Remove(ctx context.Context, contentID
 }
 
 type internalRestrictionOperationGroupImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalRestrictionOperationGroupImpl) Get(ctx context.Context, contentID, operationKey, groupNameOrID string) (*model.ResponseScheme, error) {
@@ -88,7 +88,7 @@ func (i *internalRestrictionOperationGroupImpl) Get(ctx context.Context, content
 		endpoint.WriteString(fmt.Sprintf("group/%v", groupNameOrID))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), "", nil)
 	if err != nil {
 		return nil, err
 	}
@@ -123,7 +123,7 @@ func (i *internalRestrictionOperationGroupImpl) Add(ctx context.Context, content
 		endpoint.WriteString(fmt.Sprintf("group/%v", groupNameOrID))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodPut, endpoint.String(), nil)
+	request, err := i.c.NewRequest(ctx, http.MethodPut, endpoint.String(), "", nil)
 	if err != nil {
 		return nil, err
 	}
@@ -158,7 +158,7 @@ func (i *internalRestrictionOperationGroupImpl) Remove(ctx context.Context, cont
 		endpoint.WriteString(fmt.Sprintf("group/%v", groupNameOrID))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint.String(), nil)
+	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint.String(), "", nil)
 	if err != nil {
 		return nil, err
 	}
diff --git a/confluence/internal/restriction_operation_user_content_impl.go b/confluence/internal/restriction_operation_user_content_impl.go
index 7631108..c1e66f6 100644
--- a/confluence/internal/restriction_operation_user_content_impl.go
+++ b/confluence/internal/restriction_operation_user_content_impl.go
@@ -10,7 +10,7 @@ import (
 	"net/url"
 )
 
-func NewRestrictionOperationUserService(client service.Client) *RestrictionOperationUserService {
+func NewRestrictionOperationUserService(client service.Connector) *RestrictionOperationUserService {
 
 	return &RestrictionOperationUserService{
 		internalClient: &internalRestrictionOperationUserImpl{c: client},
@@ -53,7 +53,7 @@ func (r *RestrictionOperationUserService) Remove(ctx context.Context, contentID,
 }
 
 type internalRestrictionOperationUserImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalRestrictionOperationUserImpl) Get(ctx context.Context, contentID, operationKey, accountID string) (*model.ResponseScheme, error) {
@@ -75,7 +75,7 @@ func (i *internalRestrictionOperationUserImpl) Get(ctx context.Context, contentI
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/restriction/byOperation/%v/user?%v", contentID, operationKey, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, err
 	}
@@ -102,7 +102,7 @@ func (i *internalRestrictionOperationUserImpl) Add(ctx context.Context, contentI
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/restriction/byOperation/%v/user?%v", contentID, operationKey, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodPut, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodPut, endpoint, "", nil)
 	if err != nil {
 		return nil, err
 	}
@@ -129,7 +129,7 @@ func (i *internalRestrictionOperationUserImpl) Remove(ctx context.Context, conte
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/restriction/byOperation/%v/user?%v", contentID, operationKey, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint, "", nil)
 	if err != nil {
 		return nil, err
 	}
diff --git a/confluence/internal/search_impl.go b/confluence/internal/search_impl.go
index 9f8667e..59c4f7a 100644
--- a/confluence/internal/search_impl.go
+++ b/confluence/internal/search_impl.go
@@ -12,7 +12,7 @@ import (
 	"strings"
 )
 
-func NewSearchService(client service.Client) *SearchService {
+func NewSearchService(client service.Connector) *SearchService {
 
 	return &SearchService{
 		internalClient: &internalSearchImpl{c: client},
@@ -46,7 +46,7 @@ func (s *SearchService) Users(ctx context.Context, cql string, start, limit int,
 }
 
 type internalSearchImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalSearchImpl) Content(ctx context.Context, cql string, options *model.SearchContentOptions) (*model.SearchPageScheme, *model.ResponseScheme, error) {
@@ -109,7 +109,7 @@ func (i *internalSearchImpl) Content(ctx context.Context, cql string, options *m
 
 	endpoint := fmt.Sprintf("wiki/rest/api/search?%v", query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -140,7 +140,7 @@ func (i *internalSearchImpl) Users(ctx context.Context, cql string, start, limit
 
 	endpoint := fmt.Sprintf("wiki/rest/api/search/user?%v", query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/confluence/internal/space_impl.go b/confluence/internal/space_impl.go
index f33a712..62eca75 100644
--- a/confluence/internal/space_impl.go
+++ b/confluence/internal/space_impl.go
@@ -12,7 +12,7 @@ import (
 	"strings"
 )
 
-func NewSpaceService(client service.Client, permission *SpacePermissionService) *SpaceService {
+func NewSpaceService(client service.Connector, permission *SpacePermissionService) *SpaceService {
 
 	return &SpaceService{
 		internalClient: &internalSpaceImpl{c: client},
@@ -105,7 +105,7 @@ func (s *SpaceService) ContentByType(ctx context.Context, spaceKey, contentType,
 }
 
 type internalSpaceImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalSpaceImpl) Gets(ctx context.Context, options *model.GetSpacesOptionScheme, startAt, maxResults int) (*model.SpacePageScheme, *model.ResponseScheme, error) {
@@ -157,7 +157,7 @@ func (i *internalSpaceImpl) Gets(ctx context.Context, options *model.GetSpacesOp
 
 	var endpoint = fmt.Sprintf("wiki/rest/api/space?%v", query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -173,17 +173,16 @@ func (i *internalSpaceImpl) Gets(ctx context.Context, options *model.GetSpacesOp
 
 func (i *internalSpaceImpl) Create(ctx context.Context, payload *model.CreateSpaceScheme, private bool) (*model.SpaceScheme, *model.ResponseScheme, error) {
 
-	reader, err := i.c.TransformStructToReader(payload)
-	if err != nil {
-		return nil, nil, err
-	}
+	if payload != nil {
 
-	if payload.Name == "" {
-		return nil, nil, model.ErrNoSpaceNameError
-	}
+		if payload.Name == "" {
+			return nil, nil, model.ErrNoSpaceNameError
+		}
+
+		if payload.Key == "" {
+			return nil, nil, model.ErrNoSpaceKeyError
+		}
 
-	if payload.Key == "" {
-		return nil, nil, model.ErrNoSpaceKeyError
 	}
 
 	var endpoint strings.Builder
@@ -193,7 +192,7 @@ func (i *internalSpaceImpl) Create(ctx context.Context, payload *model.CreateSpa
 		endpoint.WriteString("/_private")
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint.String(), reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint.String(), "", payload)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -223,7 +222,7 @@ func (i *internalSpaceImpl) Get(ctx context.Context, spaceKey string, expand []s
 		endpoint.WriteString(fmt.Sprintf("?%v", query.Encode()))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -243,14 +242,9 @@ func (i *internalSpaceImpl) Update(ctx context.Context, spaceKey string, payload
 		return nil, nil, model.ErrNoSpaceKeyError
 	}
 
-	reader, err := i.c.TransformStructToReader(payload)
-	if err != nil {
-		return nil, nil, err
-	}
-
 	endpoint := fmt.Sprintf("wiki/rest/api/space/%v", spaceKey)
 
-	request, err := i.c.NewRequest(ctx, http.MethodPut, endpoint, reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPut, endpoint, "", payload)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -272,7 +266,7 @@ func (i *internalSpaceImpl) Delete(ctx context.Context, spaceKey string) (*model
 
 	endpoint := fmt.Sprintf("wiki/rest/api/space/%v", spaceKey)
 
-	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -306,7 +300,7 @@ func (i *internalSpaceImpl) Content(ctx context.Context, spaceKey, depth string,
 
 	endpoint := fmt.Sprintf("wiki/rest/api/space/%v/content?%v", spaceKey, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -340,7 +334,7 @@ func (i *internalSpaceImpl) ContentByType(ctx context.Context, spaceKey, content
 
 	endpoint := fmt.Sprintf("wiki/rest/api/space/%v/content/%v?%v", spaceKey, contentType, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/confluence/internal/space_v2_impl.go b/confluence/internal/space_v2_impl.go
index 407acc7..f248d48 100644
--- a/confluence/internal/space_v2_impl.go
+++ b/confluence/internal/space_v2_impl.go
@@ -40,7 +40,7 @@ func (s *SpaceV2Service) Get(ctx context.Context, spaceID int, descriptionFormat
 	return s.internalClient.Get(ctx, spaceID, descriptionFormat)
 }
 
-func NewSpaceV2Service(client service.Client) *SpaceV2Service {
+func NewSpaceV2Service(client service.Connector) *SpaceV2Service {
 
 	return &SpaceV2Service{
 		internalClient: &internalSpaceV2Impl{c: client},
@@ -48,7 +48,7 @@ func NewSpaceV2Service(client service.Client) *SpaceV2Service {
 }
 
 type internalSpaceV2Impl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalSpaceV2Impl) Bulk(ctx context.Context, options *model.GetSpacesOptionSchemeV2, cursor string, limit int) (*model.SpaceChunkV2Scheme, *model.ResponseScheme, error) {
@@ -98,7 +98,7 @@ func (i *internalSpaceV2Impl) Bulk(ctx context.Context, options *model.GetSpaces
 
 	endpoint := fmt.Sprintf("wiki/api/v2/spaces?%v", query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -128,7 +128,7 @@ func (i *internalSpaceV2Impl) Get(ctx context.Context, spaceID int, descriptionF
 		endpoint.WriteString(fmt.Sprintf("?%v", query.Encode()))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/confluence/internal/task_impl.go b/confluence/internal/task_impl.go
index 98ac40e..eb9f3c4 100644
--- a/confluence/internal/task_impl.go
+++ b/confluence/internal/task_impl.go
@@ -11,7 +11,7 @@ import (
 	"strconv"
 )
 
-func NewTaskService(client service.Client) *TaskService {
+func NewTaskService(client service.Connector) *TaskService {
 
 	return &TaskService{
 		internalClient: &internalTaskImpl{c: client},
@@ -45,7 +45,7 @@ func (t *TaskService) Get(ctx context.Context, taskID string) (*model.LongTaskSc
 }
 
 type internalTaskImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalTaskImpl) Gets(ctx context.Context, start, limit int) (*model.LongTaskPageScheme, *model.ResponseScheme, error) {
@@ -56,7 +56,7 @@ func (i *internalTaskImpl) Gets(ctx context.Context, start, limit int) (*model.L
 
 	endpoint := fmt.Sprintf("wiki/rest/api/longtask?%v", query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -74,7 +74,7 @@ func (i *internalTaskImpl) Get(ctx context.Context, taskID string) (*model.LongT
 
 	endpoint := fmt.Sprintf("wiki/rest/api/longtask/%v", taskID)
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/confluence/internal/version_content.go b/confluence/internal/version_content.go
index abb6ef2..f459ef1 100644
--- a/confluence/internal/version_content.go
+++ b/confluence/internal/version_content.go
@@ -12,7 +12,7 @@ import (
 	"strings"
 )
 
-func NewVersionService(client service.Client) *VersionService {
+func NewVersionService(client service.Connector) *VersionService {
 
 	return &VersionService{
 		internalClient: &internalVersionImpl{c: client},
@@ -52,7 +52,7 @@ func (v *VersionService) Restore(ctx context.Context, contentID string, payload
 
 // Delete deletes a historical version.
 //
-// This does not delete the changes made to the content in that version, rather the changes for the deleted version
+// # This does not delete the changes made to the content in that version, rather the changes for the deleted version
 //
 // are rolled up into the next version. Note, you cannot delete the current version.
 //
@@ -64,7 +64,7 @@ func (v *VersionService) Delete(ctx context.Context, contentID string, versionNu
 }
 
 type internalVersionImpl struct {
-	c service.Client
+	c service.Connector
 }
 
 func (i *internalVersionImpl) Gets(ctx context.Context, contentID string, expand []string, start, limit int) (*model.ContentVersionPageScheme, *model.ResponseScheme, error) {
@@ -83,7 +83,7 @@ func (i *internalVersionImpl) Gets(ctx context.Context, contentID string, expand
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/version?%v", contentID, query.Encode())
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint, "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -113,7 +113,7 @@ func (i *internalVersionImpl) Get(ctx context.Context, contentID string, version
 		endpoint.WriteString(fmt.Sprintf("?%v", query.Encode()))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), nil)
+	request, err := i.c.NewRequest(ctx, http.MethodGet, endpoint.String(), "", nil)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -133,11 +133,6 @@ func (i *internalVersionImpl) Restore(ctx context.Context, contentID string, pay
 		return nil, nil, model.ErrNoContentIDError
 	}
 
-	reader, err := i.c.TransformStructToReader(payload)
-	if err != nil {
-		return nil, nil, err
-	}
-
 	var endpoint strings.Builder
 	endpoint.WriteString(fmt.Sprintf("wiki/rest/api/content/%v/version", contentID))
 
@@ -148,7 +143,7 @@ func (i *internalVersionImpl) Restore(ctx context.Context, contentID string, pay
 		endpoint.WriteString(fmt.Sprintf("?%v", query.Encode()))
 	}
 
-	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint.String(), reader)
+	request, err := i.c.NewRequest(ctx, http.MethodPost, endpoint.String(), "", payload)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -170,7 +165,7 @@ func (i *internalVersionImpl) Delete(ctx context.Context, contentID string, vers
 
 	endpoint := fmt.Sprintf("wiki/rest/api/content/%v/version/%v", contentID, versionNumber)
 
-	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint, nil)
+	request, err := i.c.NewRequest(ctx, http.MethodDelete, endpoint, "", nil)
 	if err != nil {
 		return nil, err
 	}
diff --git a/confluence/v2/api_client_impl.go b/confluence/v2/api_client_impl.go
index bace084..508a663 100644
--- a/confluence/v2/api_client_impl.go
+++ b/confluence/v2/api_client_impl.go
@@ -1,4 +1,4 @@
-package v2
+package confluence
 
 import (
 	"bytes"
@@ -11,7 +11,6 @@ import (
 	"io"
 	"net/http"
 	"net/url"
-	"reflect"
 	"strings"
 )
 
@@ -21,18 +20,22 @@ func New(httpClient common.HttpClient, site string) (*Client, error) {
 		httpClient = http.DefaultClient
 	}
 
+	if site == "" {
+		return nil, models.ErrNoSiteError
+	}
+
 	if !strings.HasSuffix(site, "/") {
 		site += "/"
 	}
 
-	siteAsURL, err := url.Parse(site)
+	u, err := url.Parse(site)
 	if err != nil {
 		return nil, err
 	}
 
 	client := &Client{
 		HTTP: httpClient,
-		Site: siteAsURL,
+		Site: u,
 	}
 
 	client.Auth = internal.NewAuthenticationService(client)
@@ -52,68 +55,58 @@ type Client struct {
 	Attachment *internal.AttachmentService
 }
 
-func (c *Client) NewFormRequest(ctx context.Context, method, apiEndpoint, contentType string, payload io.Reader) (*http.Request, error) {
+func (c *Client) NewRequest(ctx context.Context, method, urlStr, type_ string, body interface{}) (*http.Request, error) {
 
-	relativePath, err := url.Parse(apiEndpoint)
+	rel, err := url.Parse(urlStr)
 	if err != nil {
 		return nil, err
 	}
 
-	var endpoint = c.Site.ResolveReference(relativePath).String()
-
-	request, err := http.NewRequestWithContext(ctx, method, endpoint, payload)
-	if err != nil {
-		return nil, err
-	}
-
-	request.Header.Add("Content-Type", contentType)
-	request.Header.Add("Accept", "application/json")
-	request.Header.Set("X-Atlassian-Token", "no-check")
-
-	if c.Auth.HasBasicAuth() {
-		request.SetBasicAuth(c.Auth.GetBasicAuth())
-	}
+	u := c.Site.ResolveReference(rel)
 
-	if c.Auth.HasUserAgent() {
-		request.Header.Set("User-Agent", c.Auth.GetUserAgent())
+	buf := new(bytes.Buffer)
+	if body != nil {
+		if err = json.NewEncoder(buf).Encode(body); err != nil {
+			return nil, err
+		}
 	}
 
-	if c.Auth.GetBearerToken() != "" {
-		request.Header.Add("Authorization", fmt.Sprintf("Bearer %v", c.Auth.GetBearerToken()))
+	// If the body interface is a *bytes.Buffer type
+	// it means the NewRequest() requires to handle the RFC 1867 ISO
+	if attachBuffer, ok := body.(*bytes.Buffer); ok {
+		buf = attachBuffer
 	}
 
-	return request, nil
-}
-
-func (c *Client) NewRequest(ctx context.Context, method, apiEndpoint string, payload io.Reader) (*http.Request, error) {
-
-	relativePath, err := url.Parse(apiEndpoint)
+	req, err := http.NewRequestWithContext(ctx, method, u.String(), buf)
 	if err != nil {
 		return nil, err
 	}
 
-	var endpoint = c.Site.ResolveReference(relativePath).String()
+	req.Header.Set("Accept", "application/json")
 
-	request, err := http.NewRequestWithContext(ctx, method, endpoint, payload)
-	if err != nil {
-		return nil, err
+	if body != nil {
+		req.Header.Set("Content-Type", "application/json")
 	}
 
-	request.Header.Set("Accept", "application/json")
-
-	if payload != nil {
-		request.Header.Set("Content-Type", "application/json")
+	if type_ != "" {
+		// When the type_ is provided, it means the request needs to be created to handle files
+		req.Header.Set("Content-Type", type_)
+		req.Header.Set("X-Atlassian-Token", "no-check")
 	}
 
 	if c.Auth.HasBasicAuth() {
-		request.SetBasicAuth(c.Auth.GetBasicAuth())
+		req.SetBasicAuth(c.Auth.GetBasicAuth())
 	}
 
 	if c.Auth.HasUserAgent() {
-		request.Header.Set("User-Agent", c.Auth.GetUserAgent())
+		req.Header.Set("User-Agent", c.Auth.GetUserAgent())
 	}
 
-	return request, nil
+	if c.Auth.GetBearerToken() != "" && !c.Auth.HasBasicAuth() {
+		req.Header.Add("Authorization", fmt.Sprintf("Bearer %v", c.Auth.GetBearerToken()))
+	}
+
+	return req, nil
 }
 
 func (c *Client) Call(request *http.Request, structure interface{}) (*models.ResponseScheme, error) {
@@ -123,12 +116,14 @@ func (c *Client) Call(request *http.Request, structure interface{}) (*models.Res
 		return nil, err
 	}
 
-	return c.TransformTheHTTPResponse(response, structure)
+	return c.processResponse(response, structure)
 }
 
-func (c *Client) TransformTheHTTPResponse(response *http.Response, structure interface{}) (*models.ResponseScheme, error) {
+func (c *Client) processResponse(response *http.Response, structure interface{}) (*models.ResponseScheme, error) {
+
+	defer response.Body.Close()
 
-	responseTransformed := &models.ResponseScheme{
+	res := &models.ResponseScheme{
 		Response: response,
 		Code:     response.StatusCode,
 		Endpoint: response.Request.URL.String(),
@@ -137,39 +132,39 @@ func (c *Client) TransformTheHTTPResponse(response *http.Response, structure int
 
 	responseAsBytes, err := io.ReadAll(response.Body)
 	if err != nil {
-		return responseTransformed, err
+		return res, err
 	}
 
-	responseTransformed.Bytes.Write(responseAsBytes)
+	res.Bytes.Write(responseAsBytes)
+
+	wasSuccess := response.StatusCode >= 200 && response.StatusCode < 300
 
-	var wasSuccess = response.StatusCode >= 200 && response.StatusCode < 300
 	if !wasSuccess {
-		return responseTransformed, models.ErrInvalidStatusCodeError
-	}
 
-	if structure != nil {
-		if err = json.Unmarshal(responseAsBytes, &structure); err != nil {
-			return responseTransformed, err
-		}
-	}
+		switch response.StatusCode {
 
-	return responseTransformed, nil
-}
+		case http.StatusNotFound:
+			return res, models.ErrNotFound
 
-func (c *Client) TransformStructToReader(structure interface{}) (io.Reader, error) {
+		case http.StatusUnauthorized:
+			return res, models.ErrUnauthorized
 
-	if structure == nil {
-		return nil, models.ErrNilPayloadError
-	}
+		case http.StatusInternalServerError:
+			return res, models.ErrInternalError
+
+		case http.StatusBadRequest:
+			return res, models.ErrBadRequestError
 
-	if reflect.ValueOf(structure).Type().Kind() == reflect.Struct {
-		return nil, models.ErrNonPayloadPointerError
+		default:
+			return res, models.ErrInvalidStatusCodeError
+		}
 	}
 
-	structureAsBodyBytes, err := json.Marshal(structure)
-	if err != nil {
-		return nil, err
+	if structure != nil {
+		if err = json.Unmarshal(responseAsBytes, &structure); err != nil {
+			return res, err
+		}
 	}
 
-	return bytes.NewReader(structureAsBodyBytes), nil
+	return res, nil
 }
diff --git a/go.mod b/go.mod
index 997e42d..e0159f0 100644
--- a/go.mod
+++ b/go.mod
@@ -7,5 +7,5 @@ require (
 	github.com/imdario/mergo v0.3.16
 	github.com/perimeterx/marshmallow v1.1.5
 	github.com/stretchr/testify v1.8.4
-	github.com/tidwall/gjson v1.15.0
+	github.com/tidwall/gjson v1.14.3
 )
diff --git a/go.sum b/go.sum
index faf52e4..7fc0941 100644
--- a/go.sum
+++ b/go.sum
@@ -23,8 +23,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
 github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/tidwall/gjson v1.15.0 h1:5n/pM+v3r5ujuNl4YLZLsQ+UE5jlkLVm7jMzT5Mpolw=
-github.com/tidwall/gjson v1.15.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
+github.com/tidwall/gjson v1.14.3 h1:9jvXn7olKEHU1S9vwoMGliaT8jq1vJ7IH/n9zD9Dnlw=
+github.com/tidwall/gjson v1.14.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
 github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
 github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
 github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
diff --git a/jira/agile/api_client_impl.go b/jira/agile/api_client_impl.go
index 6c98efb..ef9c8a3 100644
--- a/jira/agile/api_client_impl.go
+++ b/jira/agile/api_client_impl.go
@@ -95,7 +95,7 @@ func (c *Client) NewRequest(ctx context.Context, method, urlStr, type_ string, b
 		req.Header.Set("User-Agent", c.Auth.GetUserAgent())
 	}
 
-	if c.Auth.GetBearerToken() != "" {
+	if c.Auth.GetBearerToken() != "" && !c.Auth.HasBasicAuth() {
 		req.Header.Add("Authorization", fmt.Sprintf("Bearer %v", c.Auth.GetBearerToken()))
 	}
 
diff --git a/jira/sm/api_client_impl.go b/jira/sm/api_client_impl.go
index a627889..491f7da 100644
--- a/jira/sm/api_client_impl.go
+++ b/jira/sm/api_client_impl.go
@@ -134,7 +134,7 @@ func (c *Client) NewRequest(ctx context.Context, method, urlStr, type_ string, b
 		req.Header.Set("X-ExperimentalApi", "opt-in")
 	}
 
-	if c.Auth.GetBearerToken() != "" {
+	if c.Auth.GetBearerToken() != "" && !c.Auth.HasBasicAuth() {
 		req.Header.Add("Authorization", fmt.Sprintf("Bearer %v", c.Auth.GetBearerToken()))
 	}
 
diff --git a/jira/v2/api_client_impl.go b/jira/v2/api_client_impl.go
index dbf5a8d..168d449 100644
--- a/jira/v2/api_client_impl.go
+++ b/jira/v2/api_client_impl.go
@@ -454,7 +454,7 @@ func (c *Client) NewRequest(ctx context.Context, method, urlStr, type_ string, b
 		req.Header.Set("User-Agent", c.Auth.GetUserAgent())
 	}
 
-	if c.Auth.GetBearerToken() != "" {
+	if c.Auth.GetBearerToken() != "" && !c.Auth.HasBasicAuth() {
 		req.Header.Add("Authorization", fmt.Sprintf("Bearer %v", c.Auth.GetBearerToken()))
 	}
 
diff --git a/jira/v3/api_client_impl.go b/jira/v3/api_client_impl.go
index 3010afb..05586ee 100644
--- a/jira/v3/api_client_impl.go
+++ b/jira/v3/api_client_impl.go
@@ -454,7 +454,7 @@ func (c *Client) NewRequest(ctx context.Context, method, urlStr, type_ string, b
 		req.Header.Set("User-Agent", c.Auth.GetUserAgent())
 	}
 
-	if c.Auth.GetBearerToken() != "" {
+	if c.Auth.GetBearerToken() != "" && !c.Auth.HasBasicAuth() {
 		req.Header.Add("Authorization", fmt.Sprintf("Bearer %v", c.Auth.GetBearerToken()))
 	}
 


Test patch:
diff --git a/confluence/api_client_impl_test.go b/confluence/api_client_impl_test.go
index 7e313be..3739fdf 100644
--- a/confluence/api_client_impl_test.go
+++ b/confluence/api_client_impl_test.go
@@ -3,15 +3,13 @@ package confluence
 import (
 	"bytes"
 	"context"
-	"encoding/json"
 	"errors"
 	"github.com/ctreminiom/go-atlassian/confluence/internal"
-	"github.com/ctreminiom/go-atlassian/pkg/infra/models"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"github.com/ctreminiom/go-atlassian/service/common"
 	"github.com/ctreminiom/go-atlassian/service/mocks"
 	"github.com/stretchr/testify/assert"
 	"io"
-	"io/ioutil"
 	"net/http"
 	"net/url"
 	"strings"
@@ -22,28 +20,54 @@ func TestClient_Call(t *testing.T) {
 
 	expectedResponse := &http.Response{
 		StatusCode: http.StatusOK,
-		Body:       ioutil.NopCloser(strings.NewReader("Hello, world!")),
+		Body:       io.NopCloser(strings.NewReader("Hello, world!")),
 		Request: &http.Request{
 			Method: http.MethodGet,
 			URL:    &url.URL{},
 		},
 	}
 
-	nonExpectedResponse := &http.Response{
+	badRequestResponse := &http.Response{
 		StatusCode: http.StatusBadRequest,
-		Body:       ioutil.NopCloser(strings.NewReader("Hello, world!")),
+		Body:       io.NopCloser(strings.NewReader("Hello, world!")),
 		Request: &http.Request{
 			Method: http.MethodGet,
 			URL:    &url.URL{},
 		},
 	}
 
-	type fields struct {
-		HTTP           common.HttpClient
-		Site           *url.URL
-		Authentication common.Authentication
+	internalServerResponse := &http.Response{
+		StatusCode: http.StatusInternalServerError,
+		Body:       io.NopCloser(strings.NewReader("Hello, world!")),
+		Request: &http.Request{
+			Method: http.MethodGet,
+			URL:    &url.URL{},
+		},
+	}
+
+	unauthorizedResponse := &http.Response{
+		StatusCode: http.StatusUnauthorized,
+		Body:       io.NopCloser(strings.NewReader("Hello, world!")),
+		Request: &http.Request{
+			Method: http.MethodGet,
+			URL:    &url.URL{},
+		},
+	}
+
+	notFoundResponse := &http.Response{
+		StatusCode: http.StatusNotFound,
+		Body:       io.NopCloser(strings.NewReader("Hello, world!")),
+		Request: &http.Request{
+			Method: http.MethodGet,
+			URL:    &url.URL{},
+		},
 	}
 
+	type fields struct {
+		HTTP common.HttpClient
+		Site *url.URL
+		Auth common.Authentication
+	}
 	type args struct {
 		request   *http.Request
 		structure interface{}
@@ -52,9 +76,9 @@ func TestClient_Call(t *testing.T) {
 	testCases := []struct {
 		name    string
 		fields  fields
-		on      func(*fields)
 		args    args
-		want    *models.ResponseScheme
+		on      func(*fields)
+		want    *model.ResponseScheme
 		wantErr bool
 		Err     error
 	}{
@@ -73,7 +97,7 @@ func TestClient_Call(t *testing.T) {
 				request:   nil,
 				structure: nil,
 			},
-			want: &models.ResponseScheme{
+			want: &model.ResponseScheme{
 				Response: expectedResponse,
 				Code:     http.StatusOK,
 				Method:   http.MethodGet,
@@ -83,13 +107,13 @@ func TestClient_Call(t *testing.T) {
 		},
 
 		{
-			name: "when the response status is not valid",
+			name: "when the response status is a bad request",
 			on: func(fields *fields) {
 
 				client := mocks.NewHttpClient(t)
 
 				client.On("Do", (*http.Request)(nil)).
-					Return(nonExpectedResponse, nil)
+					Return(badRequestResponse, nil)
 
 				fields.HTTP = client
 			},
@@ -97,115 +121,104 @@ func TestClient_Call(t *testing.T) {
 				request:   nil,
 				structure: nil,
 			},
-			want: &models.ResponseScheme{
-				Response: nonExpectedResponse,
+			want: &model.ResponseScheme{
+				Response: badRequestResponse,
 				Code:     http.StatusBadRequest,
 				Method:   http.MethodGet,
 				Bytes:    *bytes.NewBufferString("Hello, world!"),
 			},
 			wantErr: true,
-			Err:     models.ErrInvalidStatusCodeError,
+			Err:     model.ErrBadRequestError,
 		},
 
 		{
-			name: "when the http callback cannot be executed",
+			name: "when the response status is an internal service error",
 			on: func(fields *fields) {
 
 				client := mocks.NewHttpClient(t)
 
 				client.On("Do", (*http.Request)(nil)).
-					Return(nil, errors.New("error, unable to execute the http call"))
+					Return(internalServerResponse, nil)
 
 				fields.HTTP = client
 			},
+			args: args{
+				request:   nil,
+				structure: nil,
+			},
+			want: &model.ResponseScheme{
+				Response: internalServerResponse,
+				Code:     http.StatusInternalServerError,
+				Method:   http.MethodGet,
+				Bytes:    *bytes.NewBufferString("Hello, world!"),
+			},
 			wantErr: true,
-			Err:     errors.New("error, unable to execute the http call"),
+			Err:     model.ErrInternalError,
 		},
-	}
-
-	for _, testCase := range testCases {
 
-		t.Run(testCase.name, func(t *testing.T) {
-
-			if testCase.on != nil {
-				testCase.on(&testCase.fields)
-			}
-
-			c := &Client{
-				HTTP: testCase.fields.HTTP,
-				Site: testCase.fields.Site,
-				Auth: testCase.fields.Authentication,
-			}
-
-			got, err := c.Call(testCase.args.request, testCase.args.structure)
-
-			if testCase.wantErr {
-
-				if err != nil {
-					t.Logf("error returned: %v", err.Error())
-				}
-
-				assert.EqualError(t, err, testCase.Err.Error())
-
-			} else {
-				assert.NoError(t, err)
-				assert.Equal(t, got, testCase.want)
-			}
-		})
-	}
-}
-
-func TestNewV2(t *testing.T) {
-
-	mockClient, err := New(http.DefaultClient, "https://ctreminiom.atlassian.net")
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	mockClient.Auth.SetBasicAuth("test", "test")
-	mockClient.Auth.SetUserAgent("aaa")
+		{
+			name: "when the response status is a not found",
+			on: func(fields *fields) {
 
-	mockClient2, _ := New(nil, " https://zhidao.baidu.com/special/view?id=sd&preview=1")
+				client := mocks.NewHttpClient(t)
 
-	type args struct {
-		httpClient common.HttpClient
-		site       string
-	}
+				client.On("Do", (*http.Request)(nil)).
+					Return(notFoundResponse, nil)
 
-	testCases := []struct {
-		name    string
-		args    args
-		on      func(*args)
-		want    *Client
-		wantErr bool
-		Err     error
-	}{
-		{
-			name: "when the parameters are correct",
+				fields.HTTP = client
+			},
 			args: args{
-				httpClient: http.DefaultClient,
-				site:       "https://ctreminiom.atlassian.net",
+				request:   nil,
+				structure: nil,
 			},
-			want:    mockClient,
-			wantErr: false,
+			want: &model.ResponseScheme{
+				Response: notFoundResponse,
+				Code:     http.StatusNotFound,
+				Method:   http.MethodGet,
+				Bytes:    *bytes.NewBufferString("Hello, world!"),
+			},
+			wantErr: true,
+			Err:     model.ErrNotFound,
 		},
 
 		{
-			name: "when the site url is not valid",
+			name: "when the response status is unauthorized",
+			on: func(fields *fields) {
+
+				client := mocks.NewHttpClient(t)
+
+				client.On("Do", (*http.Request)(nil)).
+					Return(unauthorizedResponse, nil)
+
+				fields.HTTP = client
+			},
 			args: args{
-				httpClient: http.DefaultClient,
-				site:       " https://zhidao.baidu.com/special/view?id=sd&preview=1",
+				request:   nil,
+				structure: nil,
+			},
+			want: &model.ResponseScheme{
+				Response: unauthorizedResponse,
+				Code:     http.StatusUnauthorized,
+				Method:   http.MethodGet,
+				Bytes:    *bytes.NewBufferString("Hello, world!"),
 			},
-			want:    mockClient2,
 			wantErr: true,
-			Err:     errors.New("parse \" https://zhidao.baidu.com/special/view?id=sd&preview=1/\": first path segment in URL cannot contain colon"),
+			Err:     model.ErrUnauthorized,
 		},
 	}
-
 	for _, testCase := range testCases {
 		t.Run(testCase.name, func(t *testing.T) {
 
-			gotClient, err := New(testCase.args.httpClient, testCase.args.site)
+			if testCase.on != nil {
+				testCase.on(&testCase.fields)
+			}
+
+			c := &Client{
+				HTTP: testCase.fields.HTTP,
+				Site: testCase.fields.Site,
+			}
+
+			got, err := c.Call(testCase.args.request, testCase.args.structure)
 
 			if testCase.wantErr {
 
@@ -213,23 +226,23 @@ func TestNewV2(t *testing.T) {
 					t.Logf("error returned: %v", err.Error())
 				}
 
-				assert.Error(t, err)
 				assert.EqualError(t, err, testCase.Err.Error())
 
 			} else {
 				assert.NoError(t, err)
-				assert.NotEqual(t, gotClient, nil)
+				assert.Equal(t, got, testCase.want)
 			}
 
 		})
 	}
 }
 
-func TestClient_NewFormRequest(t *testing.T) {
+func TestClient_NewRequest(t *testing.T) {
 
 	authMocked := internal.NewAuthenticationService(nil)
 	authMocked.SetBasicAuth("mail", "token")
 	authMocked.SetUserAgent("firefox")
+	authMocked.SetBearerToken("token_sample")
 
 	siteAsURL, err := url.Parse("https://ctreminiom.atlassian.net")
 	if err != nil {
@@ -246,9 +259,8 @@ func TestClient_NewFormRequest(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	requestMocked.Header.Add("Content-Type", "form-type-sample")
-	requestMocked.Header.Add("Accept", "application/json")
-	requestMocked.Header.Set("X-Atlassian-Token", "no-check")
+	requestMocked.Header.Set("Accept", "application/json")
+	requestMocked.Header.Set("Content-Type", "application/json")
 
 	type fields struct {
 		HTTP common.HttpClient
@@ -257,11 +269,11 @@ func TestClient_NewFormRequest(t *testing.T) {
 	}
 
 	type args struct {
-		ctx         context.Context
-		method      string
-		apiEndpoint string
-		contentType string
-		payload     io.Reader
+		ctx    context.Context
+		method string
+		urlStr string
+		type_  string
+		body   interface{}
 	}
 
 	testCases := []struct {
@@ -279,11 +291,11 @@ func TestClient_NewFormRequest(t *testing.T) {
 				Site: siteAsURL,
 			},
 			args: args{
-				ctx:         context.TODO(),
-				method:      http.MethodGet,
-				apiEndpoint: "rest/2/issue/attachment",
-				contentType: "form-type-sample",
-				payload:     bytes.NewReader([]byte("Hello World")),
+				ctx:    context.TODO(),
+				method: http.MethodGet,
+				urlStr: "rest/2/issue/attachment",
+				type_:  "",
+				body:   bytes.NewReader([]byte("Hello World")),
 			},
 			want:    requestMocked,
 			wantErr: false,
@@ -297,16 +309,33 @@ func TestClient_NewFormRequest(t *testing.T) {
 				Site: siteAsURL,
 			},
 			args: args{
-				ctx:         context.TODO(),
-				method:      http.MethodGet,
-				apiEndpoint: " https://zhidao.baidu.com/special/view?id=49105a24626975510000&preview=1",
-				contentType: "form-type-sample",
-				payload:     bytes.NewReader([]byte("Hello World")),
+				ctx:    context.TODO(),
+				method: http.MethodGet,
+				urlStr: " https://zhidao.baidu.com/special/view?id=49105a24626975510000&preview=1",
+				body:   bytes.NewReader([]byte("Hello World")),
 			},
 			want:    nil,
 			wantErr: true,
 		},
 
+		{
+			name: "when the content type is provided",
+			fields: fields{
+				HTTP: http.DefaultClient,
+				Auth: authMocked,
+				Site: siteAsURL,
+			},
+			args: args{
+				ctx:    context.TODO(),
+				method: http.MethodGet,
+				urlStr: "rest/2/issue/attachment",
+				type_:  "type_sample",
+				body:   bytes.NewReader([]byte("Hello World")),
+			},
+			want:    requestMocked,
+			wantErr: false,
+		},
+
 		{
 			name: "when the request cannot be created",
 			fields: fields{
@@ -315,25 +344,32 @@ func TestClient_NewFormRequest(t *testing.T) {
 				Site: siteAsURL,
 			},
 			args: args{
-				ctx:         nil,
-				method:      http.MethodGet,
-				apiEndpoint: "rest/2/issue/attachment",
-				contentType: "form-type-sample",
-				payload:     bytes.NewReader([]byte("Hello World")),
+				ctx:    nil,
+				method: http.MethodGet,
+				urlStr: "rest/2/issue/attachment",
+				body:   bytes.NewReader([]byte("Hello World")),
 			},
 			want:    requestMocked,
 			wantErr: true,
 		},
 	}
+
 	for _, testCase := range testCases {
 		t.Run(testCase.name, func(t *testing.T) {
+
 			c := &Client{
 				HTTP: testCase.fields.HTTP,
 				Auth: testCase.fields.Auth,
 				Site: testCase.fields.Site,
 			}
 
-			got, err := c.NewFormRequest(testCase.args.ctx, testCase.args.method, testCase.args.apiEndpoint, testCase.args.contentType, testCase.args.payload)
+			got, err := c.NewRequest(
+				testCase.args.ctx,
+				testCase.args.method,
+				testCase.args.urlStr,
+				testCase.args.type_,
+				testCase.args.body,
+			)
 
 			if testCase.wantErr {
 
@@ -346,11 +382,12 @@ func TestClient_NewFormRequest(t *testing.T) {
 				assert.NoError(t, err)
 				assert.NotEqual(t, got, nil)
 			}
+
 		})
 	}
 }
 
-func TestClient_TransformTheHTTPResponse(t *testing.T) {
+func TestClient_processResponse(t *testing.T) {
 
 	expectedJsonResponse := `
 	{
@@ -362,7 +399,7 @@ func TestClient_TransformTheHTTPResponse(t *testing.T) {
 
 	expectedResponse := &http.Response{
 		StatusCode: http.StatusOK,
-		Body:       ioutil.NopCloser(strings.NewReader(expectedJsonResponse)),
+		Body:       io.NopCloser(strings.NewReader(expectedJsonResponse)),
 		Request: &http.Request{
 			Method: http.MethodGet,
 			URL:    &url.URL{},
@@ -374,7 +411,6 @@ func TestClient_TransformTheHTTPResponse(t *testing.T) {
 		Site           *url.URL
 		Authentication common.Authentication
 	}
-
 	type args struct {
 		response  *http.Response
 		structure interface{}
@@ -384,7 +420,7 @@ func TestClient_TransformTheHTTPResponse(t *testing.T) {
 		name    string
 		fields  fields
 		args    args
-		want    *models.ResponseScheme
+		want    *model.ResponseScheme
 		wantErr bool
 		Err     error
 	}{
@@ -393,9 +429,9 @@ func TestClient_TransformTheHTTPResponse(t *testing.T) {
 			fields: fields{},
 			args: args{
 				response:  expectedResponse,
-				structure: models.BoardScheme{},
+				structure: model.BoardScheme{},
 			},
-			want: &models.ResponseScheme{
+			want: &model.ResponseScheme{
 				Response: expectedResponse,
 				Code:     http.StatusOK,
 				Method:   http.MethodGet,
@@ -404,16 +440,16 @@ func TestClient_TransformTheHTTPResponse(t *testing.T) {
 			wantErr: false,
 		},
 	}
-
 	for _, testCase := range testCases {
 		t.Run(testCase.name, func(t *testing.T) {
+
 			c := &Client{
 				HTTP: testCase.fields.HTTP,
 				Site: testCase.fields.Site,
 				Auth: testCase.fields.Authentication,
 			}
 
-			got, err := c.TransformTheHTTPResponse(testCase.args.response, testCase.args.structure)
+			got, err := c.processResponse(testCase.args.response, testCase.args.structure)
 
 			if testCase.wantErr {
 
@@ -428,85 +464,74 @@ func TestClient_TransformTheHTTPResponse(t *testing.T) {
 				assert.NoError(t, err)
 				assert.NotEqual(t, got, nil)
 			}
+
 		})
 	}
 }
 
-func TestClient_TransformStructToReader(t *testing.T) {
-
-	expectedBytes, err := json.Marshal(&models.BoardScheme{
-		Name: "BoardConnector Sample",
-		Type: "Scrum",
-	})
+func TestNew(t *testing.T) {
 
+	mockClient, err := New(http.DefaultClient, "https://ctreminiom.atlassian.net")
 	if err != nil {
 		t.Fatal(err)
 	}
 
-	type fields struct {
-		HTTP           common.HttpClient
-		Site           *url.URL
-		Authentication common.Authentication
-	}
+	mockClient.Auth.SetBasicAuth("test", "test")
+	mockClient.Auth.SetUserAgent("aaa")
+
+	invalidURLClientMocked, _ := New(nil, " https://zhidao.baidu.com/special/view?id=sd&preview=1")
+
+	noURLClientMocked, _ := New(nil, "")
 
 	type args struct {
-		structure interface{}
+		httpClient common.HttpClient
+		site       string
 	}
 
 	testCases := []struct {
 		name    string
-		fields  fields
 		args    args
-		want    io.Reader
+		want    *Client
 		wantErr bool
 		Err     error
 	}{
+
 		{
 			name: "when the parameters are correct",
 			args: args{
-				structure: &models.BoardScheme{
-					Name: "BoardConnector Sample",
-					Type: "Scrum",
-				},
+				httpClient: http.DefaultClient,
+				site:       "https://ctreminiom.atlassian.net",
 			},
-			want:    bytes.NewReader(expectedBytes),
+			want:    mockClient,
 			wantErr: false,
 		},
 
 		{
-			name: "when the payload provided is not a pointer",
+			name: "when the site url are not provided",
 			args: args{
-				structure: models.BoardScheme{
-					Name: "BoardConnector Sample",
-					Type: "Scrum",
-				},
+				httpClient: http.DefaultClient,
+				site:       "",
 			},
-			want:    bytes.NewReader(expectedBytes),
+			want:    noURLClientMocked,
 			wantErr: true,
-			Err:     models.ErrNonPayloadPointerError,
+			Err:     model.ErrNoSiteError,
 		},
-
 		{
-			name: "when the payload is not provided",
+			name: "when the site url is not valid",
 			args: args{
-				structure: nil,
+				httpClient: http.DefaultClient,
+				site:       " https://zhidao.baidu.com/special/view?id=sd&preview=1",
 			},
-			want:    bytes.NewReader(expectedBytes),
+			want:    invalidURLClientMocked,
 			wantErr: true,
-			Err:     models.ErrNilPayloadError,
+			Err:     errors.New("parse \" https://zhidao.baidu.com/special/view?id=sd&preview=1/\": first path segment in URL cannot contain colon"),
 		},
 	}
 
 	for _, testCase := range testCases {
-
 		t.Run(testCase.name, func(t *testing.T) {
-			c := &Client{
-				HTTP: testCase.fields.HTTP,
-				Site: testCase.fields.Site,
-				Auth: testCase.fields.Authentication,
-			}
 
-			got, err := c.TransformStructToReader(testCase.args.structure)
+			gotClient, err := New(testCase.args.httpClient, testCase.args.site)
 
 			if testCase.wantErr {
 
@@ -519,127 +544,7 @@ func TestClient_TransformStructToReader(t *testing.T) {
 
 			} else {
 				assert.NoError(t, err)
-				assert.NotEqual(t, got, nil)
-			}
-		})
-	}
-}
-
-func TestClient_NewRequest(t *testing.T) {
-
-	authMocked := internal.NewAuthenticationService(nil)
-	authMocked.SetBasicAuth("mail", "token")
-	authMocked.SetUserAgent("firefox")
-
-	siteAsURL, err := url.Parse("https://ctreminiom.atlassian.net")
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	requestMocked, err := http.NewRequestWithContext(context.TODO(),
-		http.MethodGet,
-		"https://ctreminiom.atlassian.net/rest/2/issue/attachment",
-		bytes.NewReader([]byte("Hello World")),
-	)
-
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	requestMocked.Header.Set("Accept", "application/json")
-	requestMocked.Header.Set("Content-Type", "application/json")
-
-	type fields struct {
-		HTTP common.HttpClient
-		Auth common.Authentication
-		Site *url.URL
-	}
-
-	type args struct {
-		ctx         context.Context
-		method      string
-		apiEndpoint string
-		payload     io.Reader
-	}
-
-	testCases := []struct {
-		name    string
-		fields  fields
-		args    args
-		want    *http.Request
-		wantErr bool
-	}{
-		{
-			name: "when the parameters are correct",
-			fields: fields{
-				HTTP: http.DefaultClient,
-				Auth: authMocked,
-				Site: siteAsURL,
-			},
-			args: args{
-				ctx:         context.TODO(),
-				method:      http.MethodGet,
-				apiEndpoint: "rest/2/issue/attachment",
-				payload:     bytes.NewReader([]byte("Hello World")),
-			},
-			want:    requestMocked,
-			wantErr: false,
-		},
-
-		{
-			name: "when the url cannot be parsed",
-			fields: fields{
-				HTTP: http.DefaultClient,
-				Auth: internal.NewAuthenticationService(nil),
-				Site: siteAsURL,
-			},
-			args: args{
-				ctx:         context.TODO(),
-				method:      http.MethodGet,
-				apiEndpoint: " https://zhidao.baidu.com/special/view?id=49105a24626975510000&preview=1",
-				payload:     bytes.NewReader([]byte("Hello World")),
-			},
-			want:    nil,
-			wantErr: true,
-		},
-
-		{
-			name: "when the request cannot be created",
-			fields: fields{
-				HTTP: http.DefaultClient,
-				Auth: internal.NewAuthenticationService(nil),
-				Site: siteAsURL,
-			},
-			args: args{
-				ctx:         nil,
-				method:      http.MethodGet,
-				apiEndpoint: "rest/2/issue/attachment",
-				payload:     bytes.NewReader([]byte("Hello World")),
-			},
-			want:    requestMocked,
-			wantErr: true,
-		},
-	}
-	for _, testCase := range testCases {
-		t.Run(testCase.name, func(t *testing.T) {
-			c := &Client{
-				HTTP: testCase.fields.HTTP,
-				Auth: testCase.fields.Auth,
-				Site: testCase.fields.Site,
-			}
-
-			got, err := c.NewRequest(testCase.args.ctx, testCase.args.method, testCase.args.apiEndpoint, testCase.args.payload)
-
-			if testCase.wantErr {
-
-				if err != nil {
-					t.Logf("error returned: %v", err.Error())
-				}
-
-				assert.Error(t, err)
-			} else {
-				assert.NoError(t, err)
-				assert.NotEqual(t, got, nil)
+				assert.NotEqual(t, gotClient, nil)
 			}
 		})
 	}
diff --git a/confluence/internal/analytics_impl_test.go b/confluence/internal/analytics_impl_test.go
index edc3499..bf6a302 100644
--- a/confluence/internal/analytics_impl_test.go
+++ b/confluence/internal/analytics_impl_test.go
@@ -14,7 +14,7 @@ import (
 func Test_internalAnalyticsServiceImpl_Get(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -39,13 +39,13 @@ func Test_internalAnalyticsServiceImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/analytics/content/2337372172371/views?fromDate=2023-10-03",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -66,13 +66,13 @@ func Test_internalAnalyticsServiceImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/analytics/content/2337372172371/views?fromDate=2023-10-03",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -124,7 +124,7 @@ func Test_internalAnalyticsServiceImpl_Get(t *testing.T) {
 func Test_internalAnalyticsServiceImpl_Distinct(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -149,13 +149,13 @@ func Test_internalAnalyticsServiceImpl_Distinct(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/analytics/content/2337372172371/viewers?fromDate=2023-10-03",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -176,13 +176,13 @@ func Test_internalAnalyticsServiceImpl_Distinct(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/analytics/content/2337372172371/viewers?fromDate=2023-10-03",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/attachment_content_impl_test.go b/confluence/internal/attachment_content_impl_test.go
index a2e5f4a..76eaad3 100644
--- a/confluence/internal/attachment_content_impl_test.go
+++ b/confluence/internal/attachment_content_impl_test.go
@@ -18,7 +18,7 @@ import (
 func Test_internalContentAttachmentImpl_Gets(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -51,13 +51,13 @@ func Test_internalContentAttachmentImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100100101/child/attachment?expand=childTypes.all%2Cmetadata.currentuser&filename=report_CCID&limit=50&mediaType=excel&start=50",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -85,13 +85,13 @@ func Test_internalContentAttachmentImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100100101/child/attachment?expand=childTypes.all%2Cmetadata.currentuser&filename=report_CCID&limit=50&mediaType=excel&start=50",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -155,7 +155,7 @@ func Test_internalContentAttachmentImpl_CreateOrUpdate(t *testing.T) {
 	}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -183,9 +183,9 @@ func Test_internalContentAttachmentImpl_CreateOrUpdate(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
-				client.On("NewFormRequest",
+				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/rest/api/content/3837272/child/attachment?status=current",
@@ -214,9 +214,9 @@ func Test_internalContentAttachmentImpl_CreateOrUpdate(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
-				client.On("NewFormRequest",
+				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/rest/api/content/3837272/child/attachment?status=current",
@@ -306,7 +306,7 @@ func Test_internalContentAttachmentImpl_Create(t *testing.T) {
 	}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -334,9 +334,9 @@ func Test_internalContentAttachmentImpl_Create(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
-				client.On("NewFormRequest",
+				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/3837272/child/attachment?status=current",
@@ -365,9 +365,9 @@ func Test_internalContentAttachmentImpl_Create(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
-				client.On("NewFormRequest",
+				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/3837272/child/attachment?status=current",
diff --git a/confluence/internal/attachment_impl_test.go b/confluence/internal/attachment_impl_test.go
index 2527557..3ef3cdb 100644
--- a/confluence/internal/attachment_impl_test.go
+++ b/confluence/internal/attachment_impl_test.go
@@ -14,7 +14,7 @@ import (
 func Test_internalAttachmentImpl_Get(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -42,13 +42,13 @@ func Test_internalAttachmentImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/attachments/100001?serialize-ids-as-strings=true&version=25",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -71,13 +71,13 @@ func Test_internalAttachmentImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/attachments/100001?serialize-ids-as-strings=true&version=25",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -131,7 +131,7 @@ func Test_internalAttachmentImpl_Get(t *testing.T) {
 func Test_internalAttachmentImpl_Gets(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -168,13 +168,13 @@ func Test_internalAttachmentImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/labels/10001/attachments?cursor=uuid-sample&filename=credit-info&limit=100&mediaType=json&serialize-ids-as-strings=true&sort=created-date",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -204,13 +204,13 @@ func Test_internalAttachmentImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/labels/10001/attachments?cursor=uuid-sample&filename=credit-info&limit=100&mediaType=json&serialize-ids-as-strings=true&sort=created-date",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/authentication_impl_test.go b/confluence/internal/authentication_impl_test.go
index 33b541e..052f346 100644
--- a/confluence/internal/authentication_impl_test.go
+++ b/confluence/internal/authentication_impl_test.go
@@ -12,7 +12,7 @@ import (
 func TestAuthenticationService_GetBasicAuth(t *testing.T) {
 
 	type fields struct {
-		c                 service.Client
+		c                 service.Connector
 		basicAuthProvided bool
 		mail              string
 		token             string
@@ -28,7 +28,7 @@ func TestAuthenticationService_GetBasicAuth(t *testing.T) {
 		{
 			name: "when the basic auth is already set",
 			fields: fields{
-				c:     mocks.NewClient(t),
+				c:     mocks.NewConnector(t),
 				mail:  "mail",
 				token: "token",
 			},
@@ -62,7 +62,7 @@ func TestAuthenticationService_GetBasicAuth(t *testing.T) {
 
 func TestAuthenticationService_GetUserAgent(t *testing.T) {
 	type fields struct {
-		c                 service.Client
+		c                 service.Connector
 		basicAuthProvided bool
 		mail              string
 		token             string
@@ -77,7 +77,7 @@ func TestAuthenticationService_GetUserAgent(t *testing.T) {
 		{
 			name: "when the user agent is already set",
 			fields: fields{
-				c:     mocks.NewClient(t),
+				c:     mocks.NewConnector(t),
 				agent: "firefox-09",
 			},
 			want: "firefox-09",
@@ -102,7 +102,7 @@ func TestAuthenticationService_GetUserAgent(t *testing.T) {
 
 func TestAuthenticationService_HasBasicAuth(t *testing.T) {
 	type fields struct {
-		c                 service.Client
+		c                 service.Connector
 		basicAuthProvided bool
 		mail              string
 		token             string
@@ -117,7 +117,7 @@ func TestAuthenticationService_HasBasicAuth(t *testing.T) {
 		{
 			name: "when the params are correct",
 			fields: fields{
-				c:                 mocks.NewClient(t),
+				c:                 mocks.NewConnector(t),
 				basicAuthProvided: true,
 			},
 			want: true,
@@ -143,7 +143,7 @@ func TestAuthenticationService_HasBasicAuth(t *testing.T) {
 
 func TestAuthenticationService_HasUserAgent(t *testing.T) {
 	type fields struct {
-		c                 service.Client
+		c                 service.Connector
 		basicAuthProvided bool
 		mail              string
 		token             string
@@ -184,10 +184,10 @@ func TestAuthenticationService_HasUserAgent(t *testing.T) {
 
 func TestNewAuthenticationService(t *testing.T) {
 
-	clientMocked := mocks.NewClient(t)
+	clientMocked := mocks.NewConnector(t)
 
 	type args struct {
-		client service.Client
+		client service.Connector
 	}
 	testCases := []struct {
 		name string
@@ -214,7 +214,7 @@ func TestNewAuthenticationService(t *testing.T) {
 func TestAuthenticationService_SetUserAgent(t *testing.T) {
 
 	type fields struct {
-		c                 service.Client
+		c                 service.Connector
 		basicAuthProvided bool
 		mail              string
 		token             string
@@ -254,7 +254,7 @@ func TestAuthenticationService_SetUserAgent(t *testing.T) {
 func TestAuthenticationService_SetBasicAuth(t *testing.T) {
 
 	type fields struct {
-		c                 service.Client
+		c                 service.Connector
 		basicAuthProvided bool
 		mail              string
 		token             string
@@ -297,7 +297,7 @@ func TestAuthenticationService_SetBasicAuth(t *testing.T) {
 func TestAuthenticationService_HasSetExperimentalFlag(t *testing.T) {
 
 	type fields struct {
-		c                 service.Client
+		c                 service.Connector
 		basicAuthProvided bool
 		mail              string
 		token             string
@@ -335,7 +335,7 @@ func TestAuthenticationService_HasSetExperimentalFlag(t *testing.T) {
 
 func TestAuthenticationService_GetBearerToken(t *testing.T) {
 	type fields struct {
-		c                 service.Client
+		c                 service.Connector
 		basicAuthProvided bool
 		mail              string
 		token             string
@@ -350,7 +350,7 @@ func TestAuthenticationService_GetBearerToken(t *testing.T) {
 		{
 			name: "when the parameters are correct",
 			fields: fields{
-				c:     mocks.NewClient(t),
+				c:     mocks.NewConnector(t),
 				token: "token-sample",
 			},
 			want: "token-sample",
@@ -373,7 +373,7 @@ func TestAuthenticationService_GetBearerToken(t *testing.T) {
 
 func TestAuthenticationService_SetBearerToken(t *testing.T) {
 	type fields struct {
-		c                 service.Client
+		c                 service.Connector
 		basicAuthProvided bool
 		mail              string
 		token             string
@@ -415,7 +415,7 @@ func TestAuthenticationService_SetBearerToken(t *testing.T) {
 
 func TestAuthenticationService_SetExperimentalFlag(t *testing.T) {
 	type fields struct {
-		c                 service.Client
+		c                 service.Connector
 		basicAuthProvided bool
 		mail              string
 		token             string
diff --git a/confluence/internal/children_descendants_content_impl_test.go b/confluence/internal/children_descendants_content_impl_test.go
index 63dd87c..84a90dd 100644
--- a/confluence/internal/children_descendants_content_impl_test.go
+++ b/confluence/internal/children_descendants_content_impl_test.go
@@ -1,7 +1,6 @@
 package internal
 
 import (
-	"bytes"
 	"context"
 	"errors"
 	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
@@ -15,7 +14,7 @@ import (
 func Test_internalChildrenDescandantsImpl_Children(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -43,13 +42,13 @@ func Test_internalChildrenDescandantsImpl_Children(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100100101/child?expand=attachment%2Ccomments&parentVersion=12",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -72,13 +71,13 @@ func Test_internalChildrenDescandantsImpl_Children(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100100101/child?expand=attachment%2Ccomments&parentVersion=12",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -132,7 +131,7 @@ func Test_internalChildrenDescandantsImpl_Children(t *testing.T) {
 func Test_internalChildrenDescandantsImpl_Move(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -158,13 +157,13 @@ func Test_internalChildrenDescandantsImpl_Move(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/rest/api/content/101010101/move/append/202020202",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -186,13 +185,13 @@ func Test_internalChildrenDescandantsImpl_Move(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/rest/api/content/101010101/move/before/202020202",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -214,13 +213,13 @@ func Test_internalChildrenDescandantsImpl_Move(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/rest/api/content/101010101/move/after/202020202",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -242,13 +241,13 @@ func Test_internalChildrenDescandantsImpl_Move(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/rest/api/content/100100101/move/append/200200202",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -336,7 +335,7 @@ func Test_internalChildrenDescandantsImpl_Move(t *testing.T) {
 func Test_internalChildrenDescandantsImpl_ChildrenByType(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -368,13 +367,13 @@ func Test_internalChildrenDescandantsImpl_ChildrenByType(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100100101/child/blogpost?expand=attachment%2Ccomments&limit=25&parentVersion=12&start=50",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -400,13 +399,13 @@ func Test_internalChildrenDescandantsImpl_ChildrenByType(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100100101/child/blogpost?expand=attachment%2Ccomments&limit=25&parentVersion=12&start=50",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -471,7 +470,7 @@ func Test_internalChildrenDescandantsImpl_ChildrenByType(t *testing.T) {
 func Test_internalChildrenDescandantsImpl_Descendants(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -497,13 +496,13 @@ func Test_internalChildrenDescandantsImpl_Descendants(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100100101/descendant?expand=attachment%2Ccomments",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -525,13 +524,13 @@ func Test_internalChildrenDescandantsImpl_Descendants(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100100101/descendant?expand=attachment%2Ccomments",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -583,7 +582,7 @@ func Test_internalChildrenDescandantsImpl_Descendants(t *testing.T) {
 func Test_internalChildrenDescandantsImpl_DescendantsByType(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -614,13 +613,13 @@ func Test_internalChildrenDescandantsImpl_DescendantsByType(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100100101/descendant/blogpost?depth=root&expand=attachment%2Ccomments&limit=25&start=50",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -646,13 +645,13 @@ func Test_internalChildrenDescandantsImpl_DescendantsByType(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100100101/descendant/blogpost?depth=root&expand=attachment%2Ccomments&limit=25&start=50",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -731,7 +730,7 @@ func Test_internalChildrenDescandantsImpl_CopyHierarchy(t *testing.T) {
 	}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -757,17 +756,13 @@ func Test_internalChildrenDescandantsImpl_CopyHierarchy(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/100100101/pagehierarchy/copy",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -789,17 +784,13 @@ func Test_internalChildrenDescandantsImpl_CopyHierarchy(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/100100101/pagehierarchy/copy",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -867,7 +858,7 @@ func Test_internalChildrenDescandantsImpl_CopyPage(t *testing.T) {
 	}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -895,17 +886,13 @@ func Test_internalChildrenDescandantsImpl_CopyPage(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/100100101/copy?expand=childTypes.all",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -928,17 +915,13 @@ func Test_internalChildrenDescandantsImpl_CopyPage(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/100100101/copy?expand=childTypes.all",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/comment_content_impl_test.go b/confluence/internal/comment_content_impl_test.go
index 93b92b7..9d132de 100644
--- a/confluence/internal/comment_content_impl_test.go
+++ b/confluence/internal/comment_content_impl_test.go
@@ -14,7 +14,7 @@ import (
 func Test_internalCommentImpl_Gets(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -44,13 +44,13 @@ func Test_internalCommentImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100100101/child/comment?expand=attachment%2Ccomments&limit=50&location=form&start=200",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -75,13 +75,13 @@ func Test_internalCommentImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100100101/child/comment?expand=attachment%2Ccomments&limit=50&location=form&start=200",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/content_impl_test.go b/confluence/internal/content_impl_test.go
index 4850f12..4c441d3 100644
--- a/confluence/internal/content_impl_test.go
+++ b/confluence/internal/content_impl_test.go
@@ -1,7 +1,6 @@
 package internal
 
 import (
-	"bytes"
 	"context"
 	"errors"
 	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
@@ -16,7 +15,7 @@ import (
 func Test_internalContentImpl_Gets(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -52,13 +51,13 @@ func Test_internalContentImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content?expand=childTypes.all%2Ccontainer&limit=50&orderby=history.createdDate+desc&postingDay=2019-11-17&spaceKey=DUMMY&start=200&status=form&title=How+to+login+to&trigger=viewed&type=page",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -90,13 +89,13 @@ func Test_internalContentImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content?expand=childTypes.all%2Ccontainer&limit=50&orderby=history.createdDate+desc&postingDay=2019-11-17&spaceKey=DUMMY&start=200&status=form&title=How+to+login+to&trigger=viewed&type=page",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -140,7 +139,7 @@ func Test_internalContentImpl_Gets(t *testing.T) {
 func Test_internalContentImpl_Search(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -172,13 +171,13 @@ func Test_internalContentImpl_Search(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/search?cql=space+%3D+DUMMY&cqlcontext=spaceKey&cursor=next-cursor-sample&expand=restrictions.update.restrictions.user&limit=50",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -202,13 +201,13 @@ func Test_internalContentImpl_Search(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/search?cql=space+%3D+DUMMY&cqlcontext=spaceKey&cursor=next-cursor-sample&expand=restrictions.update.restrictions.user&limit=50",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -261,7 +260,7 @@ func Test_internalContentImpl_Search(t *testing.T) {
 func Test_internalContentImpl_Get(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -289,13 +288,13 @@ func Test_internalContentImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/11727271?expand=restrictions.update.restrictions.user&version=23",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -317,13 +316,13 @@ func Test_internalContentImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/11727271?expand=restrictions.update.restrictions.user&version=23",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -376,7 +375,7 @@ func Test_internalContentImpl_Get(t *testing.T) {
 func Test_internalContentImpl_History(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -402,13 +401,13 @@ func Test_internalContentImpl_History(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/11727271/history?expand=restrictions.update.restrictions.user",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -429,13 +428,13 @@ func Test_internalContentImpl_History(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/11727271/history?expand=restrictions.update.restrictions.user",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -487,7 +486,7 @@ func Test_internalContentImpl_History(t *testing.T) {
 func Test_internalContentImpl_Delete(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -513,13 +512,13 @@ func Test_internalContentImpl_Delete(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/content/11727271?status=trashed",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -540,13 +539,13 @@ func Test_internalContentImpl_Delete(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/content/11727271?status=trashed",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -609,7 +608,7 @@ func Test_internalContentImpl_Create(t *testing.T) {
 	}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -633,17 +632,13 @@ func Test_internalContentImpl_Create(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -663,17 +658,13 @@ func Test_internalContentImpl_Create(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -728,7 +719,7 @@ func Test_internalContentImpl_Update(t *testing.T) {
 	}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -754,17 +745,13 @@ func Test_internalContentImpl_Update(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/rest/api/content/100001",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -785,17 +772,13 @@ func Test_internalContentImpl_Update(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/rest/api/content/100001",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -855,7 +838,7 @@ func Test_internalContentImpl_Archive(t *testing.T) {
 		}}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -879,17 +862,13 @@ func Test_internalContentImpl_Archive(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/archive",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -909,17 +888,13 @@ func Test_internalContentImpl_Archive(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/archive",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/label_content_impl_test.go b/confluence/internal/label_content_impl_test.go
index a2e183d..bab7d10 100644
--- a/confluence/internal/label_content_impl_test.go
+++ b/confluence/internal/label_content_impl_test.go
@@ -1,7 +1,6 @@
 package internal
 
 import (
-	"bytes"
 	"context"
 	"errors"
 	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
@@ -15,7 +14,7 @@ import (
 func Test_internalContentLabelImpl_Gets(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -44,13 +43,13 @@ func Test_internalContentLabelImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/11727271/label?limit=50&prefix=new-&start=25",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -73,13 +72,13 @@ func Test_internalContentLabelImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/11727271/label?limit=50&prefix=new-&start=25",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -132,7 +131,7 @@ func Test_internalContentLabelImpl_Gets(t *testing.T) {
 func Test_internalContentLabelImpl_Remove(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -157,13 +156,13 @@ func Test_internalContentLabelImpl_Remove(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/content/11727271/label/test",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -184,13 +183,13 @@ func Test_internalContentLabelImpl_Remove(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/content/11727271/label/test",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -258,7 +257,7 @@ func Test_internalContentLabelImpl_Add(t *testing.T) {
 	}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -286,17 +285,13 @@ func Test_internalContentLabelImpl_Add(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/11727271/label?use-400-error-response=true",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -318,17 +313,13 @@ func Test_internalContentLabelImpl_Add(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/11727271/label?use-400-error-response=true",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/label_impl_test.go b/confluence/internal/label_impl_test.go
index 19bd660..c942a72 100644
--- a/confluence/internal/label_impl_test.go
+++ b/confluence/internal/label_impl_test.go
@@ -14,7 +14,7 @@ import (
 func Test_internalLabelImpl_Get(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -42,13 +42,13 @@ func Test_internalLabelImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/label?limit=50&name=blogs&start=200&type=blogpost",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -72,13 +72,13 @@ func Test_internalLabelImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/label?limit=50&name=blogs&start=200&type=blogpost",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/page_impl_test.go b/confluence/internal/page_impl_test.go
index 94cc2b4..635d6f1 100644
--- a/confluence/internal/page_impl_test.go
+++ b/confluence/internal/page_impl_test.go
@@ -1,7 +1,6 @@
 package internal
 
 import (
-	"bytes"
 	"context"
 	"encoding/json"
 	"errors"
@@ -17,7 +16,7 @@ import (
 func Test_internalPageImpl_Get(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -47,13 +46,13 @@ func Test_internalPageImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/pages/200001?body-format=atlas_doc_format&get-draft=true&version=2",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -76,13 +75,13 @@ func Test_internalPageImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/pages/200001?body-format=atlas_doc_format&get-draft=true&version=2",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -135,7 +134,7 @@ func Test_internalPageImpl_Get(t *testing.T) {
 func Test_internalPageImpl_Bulk(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -161,13 +160,13 @@ func Test_internalPageImpl_Bulk(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/pages?cursor=cursor-sample&limit=200",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -188,13 +187,13 @@ func Test_internalPageImpl_Bulk(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/pages?cursor=cursor-sample&limit=200",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -237,7 +236,7 @@ func Test_internalPageImpl_Bulk(t *testing.T) {
 func Test_internalPageImpl_BulkFiltered(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -266,13 +265,13 @@ func Test_internalPageImpl_BulkFiltered(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/pages?cursor=cursor-sample&limit=200",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -296,13 +295,13 @@ func Test_internalPageImpl_BulkFiltered(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/pages?body-format=format-sample&cursor=cursor-sample&id=1%2C2%2C3%2C4%2C5%2C6&limit=200&status=status-sample",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -323,13 +322,13 @@ func Test_internalPageImpl_BulkFiltered(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/pages?cursor=cursor-sample&limit=200",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -379,7 +378,7 @@ func Test_internalPageImpl_BulkFiltered(t *testing.T) {
 func Test_internalPageImpl_GetsByLabel(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -409,13 +408,13 @@ func Test_internalPageImpl_GetsByLabel(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/labels/20001/pages?cursor=cursor-sample&limit=200&sort=test-label",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -447,13 +446,13 @@ func Test_internalPageImpl_GetsByLabel(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/labels/20001/pages?cursor=cursor-sample&limit=200&sort=test-label",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -497,7 +496,7 @@ func Test_internalPageImpl_GetsByLabel(t *testing.T) {
 func Test_internalPageImpl_GetsBySpace(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -525,13 +524,13 @@ func Test_internalPageImpl_GetsBySpace(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/spaces/20001/pages?cursor=cursor-sample&limit=200",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -562,13 +561,13 @@ func Test_internalPageImpl_GetsBySpace(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/spaces/20001/pages?cursor=cursor-sample&limit=200",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -611,7 +610,7 @@ func Test_internalPageImpl_GetsBySpace(t *testing.T) {
 func Test_internalPageImpl_Delete(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -635,13 +634,13 @@ func Test_internalPageImpl_Delete(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/api/v2/pages/200001",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -661,13 +660,13 @@ func Test_internalPageImpl_Delete(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/api/v2/pages/200001",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -752,7 +751,7 @@ func Test_internalPageImpl_Create(t *testing.T) {
 	}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -776,17 +775,13 @@ func Test_internalPageImpl_Create(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					mockedPayload).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/api/v2/pages",
-					bytes.NewReader([]byte{})).
+					"", mockedPayload).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -806,17 +801,13 @@ func Test_internalPageImpl_Create(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					mockedPayload).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/api/v2/pages",
-					bytes.NewReader([]byte{})).
+					"", mockedPayload).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -825,26 +816,6 @@ func Test_internalPageImpl_Create(t *testing.T) {
 			wantErr: true,
 			Err:     errors.New("error, unable to create the http request"),
 		},
-
-		{
-			name: "when the payload is not provided",
-			args: args{
-				ctx: context.TODO(),
-			},
-			on: func(fields *fields) {
-
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					(*model.PageCreatePayloadScheme)(nil)).
-					Return(nil, model.ErrNilPayloadError)
-
-				fields.c = client
-
-			},
-			wantErr: true,
-			Err:     model.ErrNilPayloadError,
-		},
 	}
 
 	for _, testCase := range testCases {
@@ -919,7 +890,7 @@ func Test_internalPageImpl_Update(t *testing.T) {
 	}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -945,17 +916,13 @@ func Test_internalPageImpl_Update(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					mockedPayload).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/api/v2/pages/215646235",
-					bytes.NewReader([]byte{})).
+					"", mockedPayload).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -976,17 +943,13 @@ func Test_internalPageImpl_Update(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					mockedPayload).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/api/v2/pages/215646235",
-					bytes.NewReader([]byte{})).
+					"", mockedPayload).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -1004,27 +967,6 @@ func Test_internalPageImpl_Update(t *testing.T) {
 			wantErr: true,
 			Err:     model.ErrNoPageIDError,
 		},
-
-		{
-			name: "when the payload is not provided",
-			args: args{
-				ctx:    context.TODO(),
-				pageID: 215646235,
-			},
-			on: func(fields *fields) {
-
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					(*model.PageUpdatePayloadScheme)(nil)).
-					Return(nil, model.ErrNilPayloadError)
-
-				fields.c = client
-
-			},
-			wantErr: true,
-			Err:     model.ErrNilPayloadError,
-		},
 	}
 
 	for _, testCase := range testCases {
diff --git a/confluence/internal/permission_content_impl_test.go b/confluence/internal/permission_content_impl_test.go
index 0a4a94e..f54f1ec 100644
--- a/confluence/internal/permission_content_impl_test.go
+++ b/confluence/internal/permission_content_impl_test.go
@@ -1,7 +1,6 @@
 package internal
 
 import (
-	"bytes"
 	"context"
 	"errors"
 	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
@@ -23,7 +22,7 @@ func Test_internalPermissionImpl_Check(t *testing.T) {
 	}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -49,17 +48,13 @@ func Test_internalPermissionImpl_Check(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/100100101/permission/check",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -81,17 +76,13 @@ func Test_internalPermissionImpl_Check(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/100100101/permission/check",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/permission_space_impl_test.go b/confluence/internal/permission_space_impl_test.go
index 96f5d5b..5fd25bb 100644
--- a/confluence/internal/permission_space_impl_test.go
+++ b/confluence/internal/permission_space_impl_test.go
@@ -1,7 +1,6 @@
 package internal
 
 import (
-	"bytes"
 	"context"
 	"errors"
 	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
@@ -26,7 +25,7 @@ func Test_internalSpacePermissionImpl_Add(t *testing.T) {
 	}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -52,17 +51,13 @@ func Test_internalSpacePermissionImpl_Add(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/space/DUMMY/permission",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -83,17 +78,13 @@ func Test_internalSpacePermissionImpl_Add(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/space/DUMMY/permission",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -164,7 +155,7 @@ func Test_internalSpacePermissionImpl_Bulk(t *testing.T) {
 	}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -190,17 +181,13 @@ func Test_internalSpacePermissionImpl_Bulk(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/space/DUMMY/permission/custom-content",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -221,17 +208,13 @@ func Test_internalSpacePermissionImpl_Bulk(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/space/DUMMY/permission/custom-content",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -282,7 +265,7 @@ func Test_internalSpacePermissionImpl_Bulk(t *testing.T) {
 func Test_internalSpacePermissionImpl_Remove(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -308,13 +291,13 @@ func Test_internalSpacePermissionImpl_Remove(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/space/DUMMY/permission/10001",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -335,13 +318,13 @@ func Test_internalSpacePermissionImpl_Remove(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/space/DUMMY/permission/10001",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/properties_content_impl_test.go b/confluence/internal/properties_content_impl_test.go
index 7ff2c59..37729b2 100644
--- a/confluence/internal/properties_content_impl_test.go
+++ b/confluence/internal/properties_content_impl_test.go
@@ -1,7 +1,6 @@
 package internal
 
 import (
-	"bytes"
 	"context"
 	"errors"
 	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
@@ -15,7 +14,7 @@ import (
 func Test_internalPropertyImpl_Gets(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -44,13 +43,13 @@ func Test_internalPropertyImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/11101/property?expand=content%2Cversion&limit=50&start=100",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -74,13 +73,13 @@ func Test_internalPropertyImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/11101/property?expand=content%2Cversion&limit=50&start=100",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -134,7 +133,7 @@ func Test_internalPropertyImpl_Gets(t *testing.T) {
 func Test_internalPropertyImpl_Get(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -159,13 +158,13 @@ func Test_internalPropertyImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/11101/property/space-key",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -187,13 +186,13 @@ func Test_internalPropertyImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/11101/property/space-key",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -256,7 +255,7 @@ func Test_internalPropertyImpl_Get(t *testing.T) {
 func Test_internalPropertyImpl_Delete(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -281,13 +280,13 @@ func Test_internalPropertyImpl_Delete(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/content/11101/property/space-key",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -309,13 +308,13 @@ func Test_internalPropertyImpl_Delete(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/content/11101/property/space-key",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -382,7 +381,7 @@ func Test_internalPropertyImpl_Create(t *testing.T) {
 	}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -408,17 +407,13 @@ func Test_internalPropertyImpl_Create(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/11101/property",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -440,17 +435,13 @@ func Test_internalPropertyImpl_Create(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/11101/property",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/restriction_content_impl_test.go b/confluence/internal/restriction_content_impl_test.go
index 7a49d5e..90936a0 100644
--- a/confluence/internal/restriction_content_impl_test.go
+++ b/confluence/internal/restriction_content_impl_test.go
@@ -1,7 +1,6 @@
 package internal
 
 import (
-	"bytes"
 	"context"
 	"errors"
 	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
@@ -15,7 +14,7 @@ import (
 func Test_internalRestrictionImpl_Gets(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -45,13 +44,13 @@ func Test_internalRestrictionImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100001/restriction?expand=restrictions.user&limit=50&start=50",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -75,13 +74,13 @@ func Test_internalRestrictionImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100001/restriction?expand=restrictions.user&limit=50&start=50",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -137,7 +136,7 @@ func Test_internalRestrictionImpl_Add(t *testing.T) {
 	payloadMocked := &model.ContentRestrictionUpdatePayloadScheme{}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -165,17 +164,13 @@ func Test_internalRestrictionImpl_Add(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/100001/restriction?expand=restrictions.user",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -198,17 +193,13 @@ func Test_internalRestrictionImpl_Add(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/100001/restriction?expand=restrictions.user",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -262,7 +253,7 @@ func Test_internalRestrictionImpl_Add(t *testing.T) {
 func Test_internalRestrictionImpl_Delete(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -288,13 +279,13 @@ func Test_internalRestrictionImpl_Delete(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/content/100001/restriction?expand=restrictions.user",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -316,13 +307,13 @@ func Test_internalRestrictionImpl_Delete(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/content/100001/restriction?expand=restrictions.user",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -377,7 +368,7 @@ func Test_internalRestrictionImpl_Update(t *testing.T) {
 	payloadMocked := &model.ContentRestrictionUpdatePayloadScheme{}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -405,17 +396,13 @@ func Test_internalRestrictionImpl_Update(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/rest/api/content/100001/restriction?expand=restrictions.user",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -438,17 +425,13 @@ func Test_internalRestrictionImpl_Update(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/rest/api/content/100001/restriction?expand=restrictions.user",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/restriction_operation_content_impl_test.go b/confluence/internal/restriction_operation_content_impl_test.go
index e0c7012..cdede85 100644
--- a/confluence/internal/restriction_operation_content_impl_test.go
+++ b/confluence/internal/restriction_operation_content_impl_test.go
@@ -14,7 +14,7 @@ import (
 func Test_internalRestrictionOperationImpl_Gets(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -40,13 +40,13 @@ func Test_internalRestrictionOperationImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100001/restriction/byOperation?expand=restrictions.user",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -68,13 +68,13 @@ func Test_internalRestrictionOperationImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100001/restriction/byOperation?expand=restrictions.user",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -127,7 +127,7 @@ func Test_internalRestrictionOperationImpl_Gets(t *testing.T) {
 func Test_internalRestrictionOperationImpl_Get(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -158,13 +158,13 @@ func Test_internalRestrictionOperationImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100001/restriction/byOperation/read?expand=restrictions.user&limit=50&start=100",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -189,13 +189,13 @@ func Test_internalRestrictionOperationImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100001/restriction/byOperation/read?expand=restrictions.user&limit=50&start=100",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/restriction_operation_group_content_impl_test.go b/confluence/internal/restriction_operation_group_content_impl_test.go
index cfd8d6a..b3af1a8 100644
--- a/confluence/internal/restriction_operation_group_content_impl_test.go
+++ b/confluence/internal/restriction_operation_group_content_impl_test.go
@@ -14,7 +14,7 @@ import (
 func Test_internalRestrictionOperationGroupImpl_Get(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -40,13 +40,13 @@ func Test_internalRestrictionOperationGroupImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100001/restriction/byOperation/read/group/confluence-users",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -69,13 +69,13 @@ func Test_internalRestrictionOperationGroupImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100001/restriction/byOperation/read/group/confluence-users",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -149,7 +149,7 @@ func Test_internalRestrictionOperationGroupImpl_Get(t *testing.T) {
 func Test_internalRestrictionOperationGroupImpl_Add(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -175,13 +175,13 @@ func Test_internalRestrictionOperationGroupImpl_Add(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/rest/api/content/100001/restriction/byOperation/read/group/confluence-users",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -204,13 +204,13 @@ func Test_internalRestrictionOperationGroupImpl_Add(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/rest/api/content/100001/restriction/byOperation/read/group/confluence-users",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -284,7 +284,7 @@ func Test_internalRestrictionOperationGroupImpl_Add(t *testing.T) {
 func Test_internalRestrictionOperationGroupImpl_Remove(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -310,13 +310,13 @@ func Test_internalRestrictionOperationGroupImpl_Remove(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/content/100001/restriction/byOperation/read/group/confluence-users",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -339,13 +339,13 @@ func Test_internalRestrictionOperationGroupImpl_Remove(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/content/100001/restriction/byOperation/read/byGroupId/5185574c-4008-49bf-803c-e71baecf37d3",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -368,13 +368,13 @@ func Test_internalRestrictionOperationGroupImpl_Remove(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/content/100001/restriction/byOperation/read/group/confluence-users",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/restriction_operation_user_content_impl_test.go b/confluence/internal/restriction_operation_user_content_impl_test.go
index 4d774ad..df1cfd7 100644
--- a/confluence/internal/restriction_operation_user_content_impl_test.go
+++ b/confluence/internal/restriction_operation_user_content_impl_test.go
@@ -14,7 +14,7 @@ import (
 func Test_internalRestrictionOperationUserImpl_Get(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -40,13 +40,13 @@ func Test_internalRestrictionOperationUserImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100001/restriction/byOperation/read/user?accountId=06db0c76-115b-498e-9cd6-921d6f6dde46",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -69,13 +69,13 @@ func Test_internalRestrictionOperationUserImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/100001/restriction/byOperation/read/user?accountId=06db0c76-115b-498e-9cd6-921d6f6dde46",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -149,7 +149,7 @@ func Test_internalRestrictionOperationUserImpl_Get(t *testing.T) {
 func Test_internalRestrictionOperationUserImpl_Add(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -175,13 +175,13 @@ func Test_internalRestrictionOperationUserImpl_Add(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/rest/api/content/100001/restriction/byOperation/read/user?accountId=06db0c76-115b-498e-9cd6-921d6f6dde46",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -204,13 +204,13 @@ func Test_internalRestrictionOperationUserImpl_Add(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/rest/api/content/100001/restriction/byOperation/read/user?accountId=06db0c76-115b-498e-9cd6-921d6f6dde46",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -284,7 +284,7 @@ func Test_internalRestrictionOperationUserImpl_Add(t *testing.T) {
 func Test_internalRestrictionOperationUserImpl_Remove(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -310,13 +310,13 @@ func Test_internalRestrictionOperationUserImpl_Remove(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/content/100001/restriction/byOperation/read/user?accountId=06db0c76-115b-498e-9cd6-921d6f6dde46",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -339,13 +339,13 @@ func Test_internalRestrictionOperationUserImpl_Remove(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/content/100001/restriction/byOperation/read/user?accountId=06db0c76-115b-498e-9cd6-921d6f6dde46",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/search_impl_test.go b/confluence/internal/search_impl_test.go
index 415d2c7..813e038 100644
--- a/confluence/internal/search_impl_test.go
+++ b/confluence/internal/search_impl_test.go
@@ -14,7 +14,7 @@ import (
 func Test_internalSearchImpl_Content(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -52,13 +52,13 @@ func Test_internalSearchImpl_Content(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/search?cql=type%3Dpage&cqlcontext=spaceKey&cursor=raNDoMsTRiNg&excerpt=indexed&excludeCurrentSpaces=true&expand=space&includeArchivedSpaces=true&limit=20&next=true&prev=true&sitePermissionTypeFilter=externalCollaborator&start=10",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -92,13 +92,13 @@ func Test_internalSearchImpl_Content(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/search?cql=type%3Dpage&cqlcontext=spaceKey&cursor=raNDoMsTRiNg&excerpt=indexed&excludeCurrentSpaces=true&expand=space&includeArchivedSpaces=true&limit=20&next=true&prev=true&sitePermissionTypeFilter=externalCollaborator&start=10",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -151,7 +151,7 @@ func Test_internalSearchImpl_Content(t *testing.T) {
 func Test_internalSearchImpl_Users(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -181,13 +181,13 @@ func Test_internalSearchImpl_Users(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/search/user?cql=type%3Dpage&expand=operations%2CpersonalSpace&limit=50&start=20",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -211,13 +211,13 @@ func Test_internalSearchImpl_Users(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/search/user?cql=type%3Dpage&expand=operations%2CpersonalSpace&limit=50&start=20",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/space_impl_test.go b/confluence/internal/space_impl_test.go
index 9fbe310..c3c80dd 100644
--- a/confluence/internal/space_impl_test.go
+++ b/confluence/internal/space_impl_test.go
@@ -1,7 +1,6 @@
 package internal
 
 import (
-	"bytes"
 	"context"
 	"errors"
 	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
@@ -15,7 +14,7 @@ import (
 func Test_internalSpaceImpl_Gets(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -51,13 +50,13 @@ func Test_internalSpaceImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/space?expand=operations&favorite=true&favouriteUserKey=DUMMY&label=label-09%2Clabel-02&limit=50&spaceID=1111&spaceID=2222&spaceID=3333&spaceKey=DUMMY&spaceKey=TEST&start=0&status=archived&type=global",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -89,13 +88,13 @@ func Test_internalSpaceImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/space?expand=operations&favorite=true&favouriteUserKey=DUMMY&label=label-09%2Clabel-02&limit=50&spaceID=1111&spaceID=2222&spaceID=3333&spaceKey=DUMMY&spaceKey=TEST&start=0&status=archived&type=global",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -140,7 +139,7 @@ func Test_internalSpaceImpl_Gets(t *testing.T) {
 func Test_internalSpaceImpl_Get(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -166,13 +165,13 @@ func Test_internalSpaceImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/space/DUMMY?expand=childtypes.all%2Coperations",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -194,13 +193,13 @@ func Test_internalSpaceImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/space/DUMMY?expand=childtypes.all%2Coperations",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -253,7 +252,7 @@ func Test_internalSpaceImpl_Get(t *testing.T) {
 func Test_internalSpaceImpl_Content(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -283,13 +282,13 @@ func Test_internalSpaceImpl_Content(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/space/DUMMY/content?depth=all&expand=childtypes.all%2Coperations&limit=50&start=0",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -314,13 +313,13 @@ func Test_internalSpaceImpl_Content(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/space/DUMMY/content?depth=all&expand=childtypes.all%2Coperations&limit=50&start=0",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -374,7 +373,7 @@ func Test_internalSpaceImpl_Content(t *testing.T) {
 func Test_internalSpaceImpl_ContentByType(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -405,13 +404,13 @@ func Test_internalSpaceImpl_ContentByType(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/space/DUMMY/content/page?depth=all&expand=childtypes.all%2Coperations&limit=50&start=0",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -437,13 +436,13 @@ func Test_internalSpaceImpl_ContentByType(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/space/DUMMY/content/page?depth=all&expand=childtypes.all%2Coperations&limit=50&start=0",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -498,7 +497,7 @@ func Test_internalSpaceImpl_ContentByType(t *testing.T) {
 func Test_internalSpaceImpl_Delete(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -522,13 +521,13 @@ func Test_internalSpaceImpl_Delete(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/space/DUMMY",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -549,13 +548,13 @@ func Test_internalSpaceImpl_Delete(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/space/DUMMY",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -616,7 +615,7 @@ func Test_internalSpaceImpl_Create(t *testing.T) {
 	}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -642,17 +641,13 @@ func Test_internalSpaceImpl_Create(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/space/_private",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -674,17 +669,13 @@ func Test_internalSpaceImpl_Create(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/space/_private",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -700,17 +691,6 @@ func Test_internalSpaceImpl_Create(t *testing.T) {
 				ctx:     context.TODO(),
 				payload: &model.CreateSpaceScheme{},
 			},
-			on: func(fields *fields) {
-
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					&model.CreateSpaceScheme{}).
-					Return(bytes.NewReader([]byte{}), nil)
-
-				fields.c = client
-
-			},
 			wantErr: true,
 			Err:     model.ErrNoSpaceNameError,
 		},
@@ -723,17 +703,7 @@ func Test_internalSpaceImpl_Create(t *testing.T) {
 					Name: "DUMMY Space",
 				},
 			},
-			on: func(fields *fields) {
-
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					&model.CreateSpaceScheme{Name: "DUMMY Space"}).
-					Return(bytes.NewReader([]byte{}), nil)
-
-				fields.c = client
 
-			},
 			wantErr: true,
 			Err:     model.ErrNoSpaceKeyError,
 		},
@@ -777,7 +747,7 @@ func Test_internalSpaceImpl_Update(t *testing.T) {
 	}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -803,17 +773,13 @@ func Test_internalSpaceImpl_Update(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/rest/api/space/DUMMY",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -835,17 +801,13 @@ func Test_internalSpaceImpl_Update(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPut,
 					"wiki/rest/api/space/DUMMY",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/space_v2_impl_test.go b/confluence/internal/space_v2_impl_test.go
index f9b086c..f99af06 100644
--- a/confluence/internal/space_v2_impl_test.go
+++ b/confluence/internal/space_v2_impl_test.go
@@ -25,7 +25,7 @@ func Test_internalSpaceV2Impl_Bulk(t *testing.T) {
 	}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -53,13 +53,13 @@ func Test_internalSpaceV2Impl_Bulk(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/spaces?cursor=cursor_sample_uuid&description-format=view&ids=10001%2C10002&keys=DUMMY&labels=test-label&limit=50&serialize-ids-as-strings=true&sort=-name&status=current&type=global",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -82,13 +82,13 @@ func Test_internalSpaceV2Impl_Bulk(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/spaces?cursor=cursor_sample_uuid&description-format=view&ids=10001%2C10002&keys=DUMMY&labels=test-label&limit=50&serialize-ids-as-strings=true&sort=-name&status=current&type=global",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -133,7 +133,7 @@ func Test_internalSpaceV2Impl_Bulk(t *testing.T) {
 func Test_internalSpaceV2Impl_Get(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -159,13 +159,13 @@ func Test_internalSpaceV2Impl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/spaces/10001?description-format=view",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -196,13 +196,13 @@ func Test_internalSpaceV2Impl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/api/v2/spaces/10001?description-format=view",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/task_impl_test.go b/confluence/internal/task_impl_test.go
index fa22159..4105eaa 100644
--- a/confluence/internal/task_impl_test.go
+++ b/confluence/internal/task_impl_test.go
@@ -14,7 +14,7 @@ import (
 func Test_internalTaskImpl_Gets(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -40,13 +40,13 @@ func Test_internalTaskImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/longtask?limit=50&start=20",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -68,13 +68,13 @@ func Test_internalTaskImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/longtask?limit=50&start=20",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -118,7 +118,7 @@ func Test_internalTaskImpl_Gets(t *testing.T) {
 func Test_internalTaskImpl_Get(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -142,13 +142,13 @@ func Test_internalTaskImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/longtask/2272737477",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -169,13 +169,13 @@ func Test_internalTaskImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/longtask/2272737477",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/internal/version_content_test.go b/confluence/internal/version_content_test.go
index 3be3706..41ae5cb 100644
--- a/confluence/internal/version_content_test.go
+++ b/confluence/internal/version_content_test.go
@@ -1,7 +1,6 @@
 package internal
 
 import (
-	"bytes"
 	"context"
 	"errors"
 	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
@@ -15,7 +14,7 @@ import (
 func Test_internalVersionImpl_Gets(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -44,13 +43,13 @@ func Test_internalVersionImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/3838282/version?expand=operations&limit=50&start=20",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -74,13 +73,13 @@ func Test_internalVersionImpl_Gets(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/3838282/version?expand=operations&limit=50&start=20",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -134,7 +133,7 @@ func Test_internalVersionImpl_Gets(t *testing.T) {
 func Test_internalVersionImpl_Get(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -162,13 +161,13 @@ func Test_internalVersionImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/3838282/version/29?expand=operations",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -191,13 +190,13 @@ func Test_internalVersionImpl_Get(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodGet,
 					"wiki/rest/api/content/3838282/version/29?expand=operations",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -260,7 +259,7 @@ func Test_internalVersionImpl_Restore(t *testing.T) {
 	}
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -288,17 +287,13 @@ func Test_internalVersionImpl_Restore(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/3838282/version?expand=operations",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -321,17 +316,13 @@ func Test_internalVersionImpl_Restore(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
-
-				client.On("TransformStructToReader",
-					payloadMocked).
-					Return(bytes.NewReader([]byte{}), nil)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodPost,
 					"wiki/rest/api/content/3838282/version?expand=operations",
-					bytes.NewReader([]byte{})).
+					"", payloadMocked).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
@@ -385,7 +376,7 @@ func Test_internalVersionImpl_Restore(t *testing.T) {
 func Test_internalVersionImpl_Delete(t *testing.T) {
 
 	type fields struct {
-		c service.Client
+		c service.Connector
 	}
 
 	type args struct {
@@ -411,13 +402,13 @@ func Test_internalVersionImpl_Delete(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/content/3838282/version/29",
-					nil).
+					"", nil).
 					Return(&http.Request{}, nil)
 
 				client.On("Call",
@@ -439,13 +430,13 @@ func Test_internalVersionImpl_Delete(t *testing.T) {
 			},
 			on: func(fields *fields) {
 
-				client := mocks.NewClient(t)
+				client := mocks.NewConnector(t)
 
 				client.On("NewRequest",
 					context.Background(),
 					http.MethodDelete,
 					"wiki/rest/api/content/3838282/version/29",
-					nil).
+					"", nil).
 					Return(&http.Request{}, errors.New("error, unable to create the http request"))
 
 				fields.c = client
diff --git a/confluence/v2/api_client_impl_test.go b/confluence/v2/api_client_impl_test.go
index d68a005..3739fdf 100644
--- a/confluence/v2/api_client_impl_test.go
+++ b/confluence/v2/api_client_impl_test.go
@@ -1,17 +1,15 @@
-package v2
+package confluence
 
 import (
 	"bytes"
 	"context"
-	"encoding/json"
 	"errors"
 	"github.com/ctreminiom/go-atlassian/confluence/internal"
-	"github.com/ctreminiom/go-atlassian/pkg/infra/models"
+	model "github.com/ctreminiom/go-atlassian/pkg/infra/models"
 	"github.com/ctreminiom/go-atlassian/service/common"
 	"github.com/ctreminiom/go-atlassian/service/mocks"
 	"github.com/stretchr/testify/assert"
 	"io"
-	"io/ioutil"
 	"net/http"
 	"net/url"
 	"strings"
@@ -22,28 +20,54 @@ func TestClient_Call(t *testing.T) {
 
 	expectedResponse := &http.Response{
 		StatusCode: http.StatusOK,
-		Body:       ioutil.NopCloser(strings.NewReader("Hello, world!")),
+		Body:       io.NopCloser(strings.NewReader("Hello, world!")),
 		Request: &http.Request{
 			Method: http.MethodGet,
 			URL:    &url.URL{},
 		},
 	}
 
-	nonExpectedResponse := &http.Response{
+	badRequestResponse := &http.Response{
 		StatusCode: http.StatusBadRequest,
-		Body:       ioutil.NopCloser(strings.NewReader("Hello, world!")),
+		Body:       io.NopCloser(strings.NewReader("Hello, world!")),
 		Request: &http.Request{
 			Method: http.MethodGet,
 			URL:    &url.URL{},
 		},
 	}
 
-	type fields struct {
-		HTTP           common.HttpClient
-		Site           *url.URL
-		Authentication common.Authentication
+	internalServerResponse := &http.Response{
+		StatusCode: http.StatusInternalServerError,
+		Body:       io.NopCloser(strings.NewReader("Hello, world!")),
+		Request: &http.Request{
+			Method: http.MethodGet,
+			URL:    &url.URL{},
+		},
+	}
+
+	unauthorizedResponse := &http.Response{
+		StatusCode: http.StatusUnauthorized,
+		Body:       io.NopCloser(strings.NewReader("Hello, world!")),
+		Request: &http.Request{
+			Method: http.MethodGet,
+			URL:    &url.URL{},
+		},
+	}
+
+	notFoundResponse := &http.Response{
+		StatusCode: http.StatusNotFound,
+		Body:       io.NopCloser(strings.NewReader("Hello, world!")),
+		Request: &http.Request{
+			Method: http.MethodGet,
+			URL:    &url.URL{},
+		},
 	}
 
+	type fields struct {
+		HTTP common.HttpClient
+		Site *url.URL
+		Auth common.Authentication
+	}
 	type args struct {
 		request   *http.Request
 		structure interface{}
@@ -52,9 +76,9 @@ func TestClient_Call(t *testing.T) {
 	testCases := []struct {
 		name    string
 		fields  fields
-		on      func(*fields)
 		args    args
-		want    *models.ResponseScheme
+		on      func(*fields)
+		want    *model.ResponseScheme
 		wantErr bool
 		Err     error
 	}{
@@ -73,7 +97,7 @@ func TestClient_Call(t *testing.T) {
 				request:   nil,
 				structure: nil,
 			},
-			want: &models.ResponseScheme{
+			want: &model.ResponseScheme{
 				Response: expectedResponse,
 				Code:     http.StatusOK,
 				Method:   http.MethodGet,
@@ -83,13 +107,13 @@ func TestClient_Call(t *testing.T) {
 		},
 
 		{
-			name: "when the response status is not valid",
+			name: "when the response status is a bad request",
 			on: func(fields *fields) {
 
 				client := mocks.NewHttpClient(t)
 
 				client.On("Do", (*http.Request)(nil)).
-					Return(nonExpectedResponse, nil)
+					Return(badRequestResponse, nil)
 
 				fields.HTTP = client
 			},
@@ -97,115 +121,104 @@ func TestClient_Call(t *testing.T) {
 				request:   nil,
 				structure: nil,
 			},
-			want: &models.ResponseScheme{
-				Response: nonExpectedResponse,
+			want: &model.ResponseScheme{
+				Response: badRequestResponse,
 				Code:     http.StatusBadRequest,
 				Method:   http.MethodGet,
 				Bytes:    *bytes.NewBufferString("Hello, world!"),
 			},
 			wantErr: true,
-			Err:     models.ErrInvalidStatusCodeError,
+			Err:     model.ErrBadRequestError,
 		},
 
 		{
-			name: "when the http callback cannot be executed",
+			name: "when the response status is an internal service error",
 			on: func(fields *fields) {
 
 				client := mocks.NewHttpClient(t)
 
 				client.On("Do", (*http.Request)(nil)).
-					Return(nil, errors.New("error, unable to execute the http call"))
+					Return(internalServerResponse, nil)
 
 				fields.HTTP = client
 			},
+			args: args{
+				request:   nil,
+				structure: nil,
+			},
+			want: &model.ResponseScheme{
+				Response: internalServerResponse,
+				Code:     http.StatusInternalServerError,
+				Method:   http.MethodGet,
+				Bytes:    *bytes.NewBufferString("Hello, world!"),
+			},
 			wantErr: true,
-			Err:     errors.New("error, unable to execute the http call"),
+			Err:     model.ErrInternalError,
 		},
-	}
-
-	for _, testCase := range testCases {
 
-		t.Run(testCase.name, func(t *testing.T) {
-
-			if testCase.on != nil {
-				testCase.on(&testCase.fields)
-			}
-
-			c := &Client{
-				HTTP: testCase.fields.HTTP,
-				Site: testCase.fields.Site,
-				Auth: testCase.fields.Authentication,
-			}
-
-			got, err := c.Call(testCase.args.request, testCase.args.structure)
-
-			if testCase.wantErr {
-
-				if err != nil {
-					t.Logf("error returned: %v", err.Error())
-				}
-
-				assert.EqualError(t, err, testCase.Err.Error())
-
-			} else {
-				assert.NoError(t, err)
-				assert.Equal(t, got, testCase.want)
-			}
-		})
-	}
-}
-
-func TestNewV2(t *testing.T) {
-
-	mockClient, err := New(http.DefaultClient, "https://ctreminiom.atlassian.net")
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	mockClient.Auth.SetBasicAuth("test", "test")
-	mockClient.Auth.SetUserAgent("aaa")
+		{
+			name: "when the response status is a not found",
+			on: func(fields *fields) {
 
-	mockClient2, _ := New(nil, " https://zhidao.baidu.com/special/view?id=sd&preview=1")
+				client := mocks.NewHttpClient(t)
 
-	type args struct {
-		httpClient common.HttpClient
-		site       string
-	}
+				client.On("Do", (*http.Request)(nil)).
+					Return(notFoundResponse, nil)
 
-	testCases := []struct {
-		name    string
-		args    args
-		on      func(*args)
-		want    *Client
-		wantErr bool
-		Err     error
-	}{
-		{
-			name: "when the parameters are correct",
+				fields.HTTP = client
+			},
 			args: args{
-				httpClient: http.DefaultClient,
-				site:       "https://ctreminiom.atlassian.net",
+				request:   nil,
+				structure: nil,
 			},
-			want:    mockClient,
-			wantErr: false,
+			want: &model.ResponseScheme{
+				Response: notFoundResponse,
+				Code:     http.StatusNotFound,
+				Method:   http.MethodGet,
+				Bytes:    *bytes.NewBufferString("Hello, world!"),
+			},
+			wantErr: true,
+			Err:     model.ErrNotFound,
 		},
 
 		{
-			name: "when the site url is not valid",
+			name: "when the response status is unauthorized",
+			on: func(fields *fields) {
+
+				client := mocks.NewHttpClient(t)
+
+				client.On("Do", (*http.Request)(nil)).
+					Return(unauthorizedResponse, nil)
+
+				fields.HTTP = client
+			},
 			args: args{
-				httpClient: http.DefaultClient,
-				site:       " https://zhidao.baidu.com/special/view?id=sd&preview=1",
+				request:   nil,
+				structure: nil,
+			},
+			want: &model.ResponseScheme{
+				Response: unauthorizedResponse,
+				Code:     http.StatusUnauthorized,
+				Method:   http.MethodGet,
+				Bytes:    *bytes.NewBufferString("Hello, world!"),
 			},
-			want:    mockClient2,
 			wantErr: true,
-			Err:     errors.New("parse \" https://zhidao.baidu.com/special/view?id=sd&preview=1/\": first path segment in URL cannot contain colon"),
+			Err:     model.ErrUnauthorized,
 		},
 	}
-
 	for _, testCase := range testCases {
 		t.Run(testCase.name, func(t *testing.T) {
 
-			gotClient, err := New(testCase.args.httpClient, testCase.args.site)
+			if testCase.on != nil {
+				testCase.on(&testCase.fields)
+			}
+
+			c := &Client{
+				HTTP: testCase.fields.HTTP,
+				Site: testCase.fields.Site,
+			}
+
+			got, err := c.Call(testCase.args.request, testCase.args.structure)
 
 			if testCase.wantErr {
 
@@ -213,23 +226,23 @@ func TestNewV2(t *testing.T) {
 					t.Logf("error returned: %v", err.Error())
 				}
 
-				assert.Error(t, err)
 				assert.EqualError(t, err, testCase.Err.Error())
 
 			} else {
 				assert.NoError(t, err)
-				assert.NotEqual(t, gotClient, nil)
+				assert.Equal(t, got, testCase.want)
 			}
 
 		})
 	}
 }
 
-func TestClient_NewFormRequest(t *testing.T) {
+func TestClient_NewRequest(t *testing.T) {
 
 	authMocked := internal.NewAuthenticationService(nil)
 	authMocked.SetBasicAuth("mail", "token")
 	authMocked.SetUserAgent("firefox")
+	authMocked.SetBearerToken("token_sample")
 
 	siteAsURL, err := url.Parse("https://ctreminiom.atlassian.net")
 	if err != nil {
@@ -246,9 +259,8 @@ func TestClient_NewFormRequest(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	requestMocked.Header.Add("Content-Type", "form-type-sample")
-	requestMocked.Header.Add("Accept", "application/json")
-	requestMocked.Header.Set("X-Atlassian-Token", "no-check")
+	requestMocked.Header.Set("Accept", "application/json")
+	requestMocked.Header.Set("Content-Type", "application/json")
 
 	type fields struct {
 		HTTP common.HttpClient
@@ -257,11 +269,11 @@ func TestClient_NewFormRequest(t *testing.T) {
 	}
 
 	type args struct {
-		ctx         context.Context
-		method      string
-		apiEndpoint string
-		contentType string
-		payload     io.Reader
+		ctx    context.Context
+		method string
+		urlStr string
+		type_  string
+		body   interface{}
 	}
 
 	testCases := []struct {
@@ -279,11 +291,11 @@ func TestClient_NewFormRequest(t *testing.T) {
 				Site: siteAsURL,
 			},
 			args: args{
-				ctx:         context.TODO(),
-				method:      http.MethodGet,
-				apiEndpoint: "rest/2/issue/attachment",
-				contentType: "form-type-sample",
-				payload:     bytes.NewReader([]byte("Hello World")),
+				ctx:    context.TODO(),
+				method: http.MethodGet,
+				urlStr: "rest/2/issue/attachment",
+				type_:  "",
+				body:   bytes.NewReader([]byte("Hello World")),
 			},
 			want:    requestMocked,
 			wantErr: false,
@@ -297,16 +309,33 @@ func TestClient_NewFormRequest(t *testing.T) {
 				Site: siteAsURL,
 			},
 			args: args{
-				ctx:         context.TODO(),
-				method:      http.MethodGet,
-				apiEndpoint: " https://zhidao.baidu.com/special/view?id=49105a24626975510000&preview=1",
-				contentType: "form-type-sample",
-				payload:     bytes.NewReader([]byte("Hello World")),
+				ctx:    context.TODO(),
+				method: http.MethodGet,
+				urlStr: " https://zhidao.baidu.com/special/view?id=49105a24626975510000&preview=1",
+				body:   bytes.NewReader([]byte("Hello World")),
 			},
 			want:    nil,
 			wantErr: true,
 		},
 
+		{
+			name: "when the content type is provided",
+			fields: fields{
+				HTTP: http.DefaultClient,
+				Auth: authMocked,
+				Site: siteAsURL,
+			},
+			args: args{
+				ctx:    context.TODO(),
+				method: http.MethodGet,
+				urlStr: "rest/2/issue/attachment",
+				type_:  "type_sample",
+				body:   bytes.NewReader([]byte("Hello World")),
+			},
+			want:    requestMocked,
+			wantErr: false,
+		},
+
 		{
 			name: "when the request cannot be created",
 			fields: fields{
@@ -315,25 +344,32 @@ func TestClient_NewFormRequest(t *testing.T) {
 				Site: siteAsURL,
 			},
 			args: args{
-				ctx:         nil,
-				method:      http.MethodGet,
-				apiEndpoint: "rest/2/issue/attachment",
-				contentType: "form-type-sample",
-				payload:     bytes.NewReader([]byte("Hello World")),
+				ctx:    nil,
+				method: http.MethodGet,
+				urlStr: "rest/2/issue/attachment",
+				body:   bytes.NewReader([]byte("Hello World")),
 			},
 			want:    requestMocked,
 			wantErr: true,
 		},
 	}
+
 	for _, testCase := range testCases {
 		t.Run(testCase.name, func(t *testing.T) {
+
 			c := &Client{
 				HTTP: testCase.fields.HTTP,
 				Auth: testCase.fields.Auth,
 				Site: testCase.fields.Site,
 			}
 
-			got, err := c.NewFormRequest(testCase.args.ctx, testCase.args.method, testCase.args.apiEndpoint, testCase.args.contentType, testCase.args.payload)
+			got, err := c.NewRequest(
+				testCase.args.ctx,
+				testCase.args.method,
+				testCase.args.urlStr,
+				testCase.args.type_,
+				testCase.args.body,
+			)
 
 			if testCase.wantErr {
 
@@ -346,11 +382,12 @@ func TestClient_NewFormRequest(t *testing.T) {
 				assert.NoError(t, err)
 				assert.NotEqual(t, got, nil)
 			}
+
 		})
 	}
 }
 
-func TestClient_TransformTheHTTPResponse(t *testing.T) {
+func TestClient_processResponse(t *testing.T) {
 
 	expectedJsonResponse := `
 	{
@@ -362,7 +399,7 @@ func TestClient_TransformTheHTTPResponse(t *testing.T) {
 
 	expectedResponse := &http.Response{
 		StatusCode: http.StatusOK,
-		Body:       ioutil.NopCloser(strings.NewReader(expectedJsonResponse)),
+		Body:       io.NopCloser(strings.NewReader(expectedJsonResponse)),
 		Request: &http.Request{
 			Method: http.MethodGet,
 			URL:    &url.URL{},
@@ -374,7 +411,6 @@ func TestClient_TransformTheHTTPResponse(t *testing.T) {
 		Site           *url.URL
 		Authentication common.Authentication
 	}
-
 	type args struct {
 		response  *http.Response
 		structure interface{}
@@ -384,7 +420,7 @@ func TestClient_TransformTheHTTPResponse(t *testing.T) {
 		name    string
 		fields  fields
 		args    args
-		want    *models.ResponseScheme
+		want    *model.ResponseScheme
 		wantErr bool
 		Err     error
 	}{
@@ -393,9 +429,9 @@ func TestClient_TransformTheHTTPResponse(t *testing.T) {
 			fields: fields{},
 			args: args{
 				response:  expectedResponse,
-				structure: models.BoardScheme{},
+				structure: model.BoardScheme{},
 			},
-			want: &models.ResponseScheme{
+			want: &model.ResponseScheme{
 				Response: expectedResponse,
 				Code:     http.StatusOK,
 				Method:   http.MethodGet,
@@ -404,16 +440,16 @@ func TestClient_TransformTheHTTPResponse(t *testing.T) {
 			wantErr: false,
 		},
 	}
-
 	for _, testCase := range testCases {
 		t.Run(testCase.name, func(t *testing.T) {
+
 			c := &Client{
 				HTTP: testCase.fields.HTTP,
 				Site: testCase.fields.Site,
 				Auth: testCase.fields.Authentication,
 			}
 
-			got, err := c.TransformTheHTTPResponse(testCase.args.response, testCase.args.structure)
+			got, err := c.processResponse(testCase.args.response, testCase.args.structure)
 
 			if testCase.wantErr {
 
@@ -428,85 +464,74 @@ func TestClient_TransformTheHTTPResponse(t *testing.T) {
 				assert.NoError(t, err)
 				assert.NotEqual(t, got, nil)
 			}
+
 		})
 	}
 }
 
-func TestClient_TransformStructToReader(t *testing.T) {
-
-	expectedBytes, err := json.Marshal(&models.BoardScheme{
-		Name: "BoardConnector Sample",
-		Type: "Scrum",
-	})
+func TestNew(t *testing.T) {
 
+	mockClient, err := New(http.DefaultClient, "https://ctreminiom.atlassian.net")
 	if err != nil {
 		t.Fatal(err)
 	}
 
-	type fields struct {
-		HTTP           common.HttpClient
-		Site           *url.URL
-		Authentication common.Authentication
-	}
+	mockClient.Auth.SetBasicAuth("test", "test")
+	mockClient.Auth.SetUserAgent("aaa")
+
+	invalidURLClientMocked, _ := New(nil, " https://zhidao.baidu.com/special/view?id=sd&preview=1")
+
+	noURLClientMocked, _ := New(nil, "")
 
 	type args struct {
-		structure interface{}
+		httpClient common.HttpClient
+		site       string
 	}
 
 	testCases := []struct {
 		name    string
-		fields  fields
 		args    args
-		want    io.Reader
+		want    *Client
 		wantErr bool
 		Err     error
 	}{
+
 		{
 			name: "when the parameters are correct",
 			args: args{
-				structure: &models.BoardScheme{
-					Name: "BoardConnector Sample",
-					Type: "Scrum",
-				},
+				httpClient: http.DefaultClient,
+				site:       "https://ctreminiom.atlassian.net",
 			},
-			want:    bytes.NewReader(expectedBytes),
+			want:    mockClient,
 			wantErr: false,
 		},
 
 		{
-			name: "when the payload provided is not a pointer",
+			name: "when the site url are not provided",
 			args: args{
-				structure: models.BoardScheme{
-					Name: "BoardConnector Sample",
-					Type: "Scrum",
-				},
+				httpClient: http.DefaultClient,
+				site:       "",
 			},
-			want:    bytes.NewReader(expectedBytes),
+			want:    noURLClientMocked,
 			wantErr: true,
-			Err:     models.ErrNonPayloadPointerError,
+			Err:     model.ErrNoSiteError,
 		},
-
 		{
-			name: "when the payload is not provided",
+			name: "when the site url is not valid",
 			args: args{
-				structure: nil,
+				httpClient: http.DefaultClient,
+				site:       " https://zhidao.baidu.com/special/view?id=sd&preview=1",
 			},
-			want:    bytes.NewReader(expectedBytes),
+			want:    invalidURLClientMocked,
 			wantErr: true,
-			Err:     models.ErrNilPayloadError,
+			Err:     errors.New("parse \" https://zhidao.baidu.com/special/view?id=sd&preview=1/\": first path segment in URL cannot contain colon"),
 		},
 	}
 
 	for _, testCase := range testCases {
-
 		t.Run(testCase.name, func(t *testing.T) {
-			c := &Client{
-				HTTP: testCase.fields.HTTP,
-				Site: testCase.fields.Site,
-				Auth: testCase.fields.Authentication,
-			}
 
-			got, err := c.TransformStructToReader(testCase.args.structure)
+			gotClient, err := New(testCase.args.httpClient, testCase.args.site)
 
 			if testCase.wantErr {
 
@@ -519,127 +544,7 @@ func TestClient_TransformStructToReader(t *testing.T) {
 
 			} else {
 				assert.NoError(t, err)
-				assert.NotEqual(t, got, nil)
-			}
-		})
-	}
-}
-
-func TestClient_NewRequest(t *testing.T) {
-
-	authMocked := internal.NewAuthenticationService(nil)
-	authMocked.SetBasicAuth("mail", "token")
-	authMocked.SetUserAgent("firefox")
-
-	siteAsURL, err := url.Parse("https://ctreminiom.atlassian.net")
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	requestMocked, err := http.NewRequestWithContext(context.TODO(),
-		http.MethodGet,
-		"https://ctreminiom.atlassian.net/rest/2/issue/attachment",
-		bytes.NewReader([]byte("Hello World")),
-	)
-
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	requestMocked.Header.Set("Accept", "application/json")
-	requestMocked.Header.Set("Content-Type", "application/json")
-
-	type fields struct {
-		HTTP common.HttpClient
-		Auth common.Authentication
-		Site *url.URL
-	}
-
-	type args struct {
-		ctx         context.Context
-		method      string
-		apiEndpoint string
-		payload     io.Reader
-	}
-
-	testCases := []struct {
-		name    string
-		fields  fields
-		args    args
-		want    *http.Request
-		wantErr bool
-	}{
-		{
-			name: "when the parameters are correct",
-			fields: fields{
-				HTTP: http.DefaultClient,
-				Auth: authMocked,
-				Site: siteAsURL,
-			},
-			args: args{
-				ctx:         context.TODO(),
-				method:      http.MethodGet,
-				apiEndpoint: "rest/2/issue/attachment",
-				payload:     bytes.NewReader([]byte("Hello World")),
-			},
-			want:    requestMocked,
-			wantErr: false,
-		},
-
-		{
-			name: "when the url cannot be parsed",
-			fields: fields{
-				HTTP: http.DefaultClient,
-				Auth: internal.NewAuthenticationService(nil),
-				Site: siteAsURL,
-			},
-			args: args{
-				ctx:         context.TODO(),
-				method:      http.MethodGet,
-				apiEndpoint: " https://zhidao.baidu.com/special/view?id=49105a24626975510000&preview=1",
-				payload:     bytes.NewReader([]byte("Hello World")),
-			},
-			want:    nil,
-			wantErr: true,
-		},
-
-		{
-			name: "when the request cannot be created",
-			fields: fields{
-				HTTP: http.DefaultClient,
-				Auth: internal.NewAuthenticationService(nil),
-				Site: siteAsURL,
-			},
-			args: args{
-				ctx:         nil,
-				method:      http.MethodGet,
-				apiEndpoint: "rest/2/issue/attachment",
-				payload:     bytes.NewReader([]byte("Hello World")),
-			},
-			want:    requestMocked,
-			wantErr: true,
-		},
-	}
-	for _, testCase := range testCases {
-		t.Run(testCase.name, func(t *testing.T) {
-			c := &Client{
-				HTTP: testCase.fields.HTTP,
-				Auth: testCase.fields.Auth,
-				Site: testCase.fields.Site,
-			}
-
-			got, err := c.NewRequest(testCase.args.ctx, testCase.args.method, testCase.args.apiEndpoint, testCase.args.payload)
-
-			if testCase.wantErr {
-
-				if err != nil {
-					t.Logf("error returned: %v", err.Error())
-				}
-
-				assert.Error(t, err)
-			} else {
-				assert.NoError(t, err)
-				assert.NotEqual(t, got, nil)
+				assert.NotEqual(t, gotClient, nil)
 			}
 		})
 	}