Repository: cloudflare/cloudflare-go
Pull request #1361 (2023-08-07 15:32:50)

WC-1473: Add support for script content and script settings read/update endpoints
This PR is to support new endpoints that allow the user to read/update either only the script content or only the script settings of a worker, as opposed to currently having to always update everything together. This makes it easier on the user when they only need to deal with one aspect of their worker.

## Has your change been tested?

I have added new tests to cover this change.

## Types of changes

What sort of change does your code introduce/modify?

- [ ] Bug fix (non-breaking change which fixes an issue)
- [X] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)

## Checklist:

- [X] My code follows the code style of this project.
- [X] My change requires a change to the documentation.
- [x] I have updated the documentation accordingly.
- [X] I have added tests to cover my changes.
- [X] All new and existing tests passed.
- [x] This change is using publicly documented in [cloudflare/api-schemas](https://github.com/cloudflare/api-schemas) 
      and relies on stable APIs.

[1]: https://help.github.com/articles/closing-issues-using-keywords/



Patch:
diff --git a/.changelog/1338.txt b/.changelog/1338.txt
deleted file mode 100644
index ce00f1f98..000000000
--- a/.changelog/1338.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-```release-note:bug
-load_balancing: Fix pool creation with MinimumOrigins set to 0
-```
diff --git a/.changelog/1343.txt b/.changelog/1343.txt
deleted file mode 100644
index df6721b23..000000000
--- a/.changelog/1343.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-```release-note:enhancement
-access_application: Add support for custom pages
-```
-
-```release-note:enhancement
-access_custom_page: Add support for custom pages
-```
-
-```release-note:enhancement
-access_organization: add support for custom pages
-```
diff --git a/.changelog/1345.txt b/.changelog/1345.txt
deleted file mode 100644
index 4e748a75c..000000000
--- a/.changelog/1345.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-```release-note:bug
-workers: Fix namespace dispatch upload API path
-```
diff --git a/.changelog/1346.txt b/.changelog/1346.txt
deleted file mode 100644
index d9826d0f6..000000000
--- a/.changelog/1346.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-```release-note:enhancement
-rulesets: Update API reference links
-```
-
-```release-note:enhancement
-rulesets: Remove internal-only schema kind
-```
-
-```release-note:enhancement
-rulesets: Remove some request parameters that are not allowed or have no effect
-```
diff --git a/.changelog/1353.txt b/.changelog/1353.txt
deleted file mode 100644
index e7a0f4024..000000000
--- a/.changelog/1353.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-```release-note:dependency
-deps: bumps golang.org/x/net from 0.12.0 to 0.13.0
-```
diff --git a/.changelog/1357.txt b/.changelog/1357.txt
deleted file mode 100644
index e6f1f3b8a..000000000
--- a/.changelog/1357.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-```release-note:enhancement
-waiting_room: add support for `queueing_status_code`
-```
\ No newline at end of file
diff --git a/.changelog/1360.txt b/.changelog/1360.txt
deleted file mode 100644
index 6b2bbae58..000000000
--- a/.changelog/1360.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-```release-note:enhancement
-cloudflare: swap `encoding/json` for `github.com/goccy/go-json`
-```
-
-```release-note:bug
-cache_purge: don't escape HTML entity values in URLs for cache keys
-```
diff --git a/.changelog/1361.txt b/.changelog/1361.txt
new file mode 100644
index 000000000..0a8293a54
--- /dev/null
+++ b/.changelog/1361.txt
@@ -0,0 +1,7 @@
+```release-note:enhancement
+workers: Add support for retrieving and uploading only script content.
+```
+
+```release-note:enhancement
+workers: Add support for retrieving and uploading only script metadata.
+```
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 183329ec3..e6f02291b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,28 +1,7 @@
-## 0.75.0 (Unreleased)
+## 0.74.0 (Unreleased)
 
 ENHANCEMENTS:
 
-* cloudflare: swap `encoding/json` for `github.com/goccy/go-json` ([#1360](https://github.com/cloudflare/cloudflare-go/issues/1360))
-* waiting_room: add support for `queueing_status_code` ([#1357](https://github.com/cloudflare/cloudflare-go/issues/1357))
-
-BUG FIXES:
-
-* cache_purge: don't escape HTML entity values in URLs for cache keys ([#1360](https://github.com/cloudflare/cloudflare-go/issues/1360))
-
-DEPENDENCIES:
-
-* deps: bumps golang.org/x/net from 0.12.0 to 0.13.0 ([#1353](https://github.com/cloudflare/cloudflare-go/issues/1353))
-
-## 0.74.0 (August 2nd, 2023)
-
-ENHANCEMENTS:
-
-* access_application: Add support for custom pages ([#1343](https://github.com/cloudflare/cloudflare-go/issues/1343))
-* access_custom_page: Add support for custom pages ([#1343](https://github.com/cloudflare/cloudflare-go/issues/1343))
-* access_organization: add support for custom pages ([#1343](https://github.com/cloudflare/cloudflare-go/issues/1343))
-* rulesets: Remove internal-only schema kind ([#1346](https://github.com/cloudflare/cloudflare-go/issues/1346))
-* rulesets: Remove some request parameters that are not allowed or have no effect ([#1346](https://github.com/cloudflare/cloudflare-go/issues/1346))
-* rulesets: Update API reference links ([#1346](https://github.com/cloudflare/cloudflare-go/issues/1346))
 * teams-accounts: Adds support for protocol detection ([#1340](https://github.com/cloudflare/cloudflare-go/issues/1340))
 * workers: Add `pipeline_hash` field to Workers script response struct. ([#1330](https://github.com/cloudflare/cloudflare-go/issues/1330))
 * workers: Add support for declaring arbitrary bindings with UnsafeBinding. ([#1330](https://github.com/cloudflare/cloudflare-go/issues/1330))
@@ -32,8 +11,6 @@ ENHANCEMENTS:
 BUG FIXES:
 
 * flarectl: allow for create or update to actually create the record ([#1341](https://github.com/cloudflare/cloudflare-go/issues/1341))
-* load_balancing: Fix pool creation with MinimumOrigins set to 0 ([#1338](https://github.com/cloudflare/cloudflare-go/issues/1338))
-* workers: Fix namespace dispatch upload API path ([#1345](https://github.com/cloudflare/cloudflare-go/issues/1345))
 
 ## 0.73.0 (July 19th, 2023)
 
diff --git a/access_application.go b/access_application.go
index 2abc6cac5..1c8bd66e6 100644
--- a/access_application.go
+++ b/access_application.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // AccessApplicationType represents the application type.
@@ -51,7 +50,6 @@ type AccessApplication struct {
 	HttpOnlyCookieAttribute *bool                          `json:"http_only_cookie_attribute,omitempty"`
 	ServiceAuth401Redirect  *bool                          `json:"service_auth_401_redirect,omitempty"`
 	PathCookieAttribute     *bool                          `json:"path_cookie_attribute,omitempty"`
-	CustomPages             []string                       `json:"custom_pages,omitempty"`
 }
 
 type AccessApplicationGatewayRule struct {
@@ -141,7 +139,6 @@ type CreateAccessApplicationParams struct {
 	SessionDuration         string                         `json:"session_duration,omitempty"`
 	SkipInterstitial        *bool                          `json:"skip_interstitial,omitempty"`
 	Type                    AccessApplicationType          `json:"type,omitempty"`
-	CustomPages             []string                       `json:"custom_pages,omitempty"`
 }
 
 type UpdateAccessApplicationParams struct {
@@ -168,7 +165,6 @@ type UpdateAccessApplicationParams struct {
 	SessionDuration         string                         `json:"session_duration,omitempty"`
 	SkipInterstitial        *bool                          `json:"skip_interstitial,omitempty"`
 	Type                    AccessApplicationType          `json:"type,omitempty"`
-	CustomPages             []string                       `json:"custom_pages,omitempty"`
 }
 
 // ListAccessApplications returns all applications within an account or zone.
diff --git a/access_audit_log.go b/access_audit_log.go
index 62658e3fa..92eb22bd8 100644
--- a/access_audit_log.go
+++ b/access_audit_log.go
@@ -2,13 +2,12 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"net/url"
 	"strconv"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // AccessAuditLogRecord is the structure of a single Access Audit Log entry.
diff --git a/access_bookmark.go b/access_bookmark.go
index 769c861da..6a335b672 100644
--- a/access_bookmark.go
+++ b/access_bookmark.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // AccessBookmark represents an Access bookmark application.
diff --git a/access_ca_certificate.go b/access_ca_certificate.go
index 8becc8e72..a1fc12b93 100644
--- a/access_ca_certificate.go
+++ b/access_ca_certificate.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // AccessCACertificate is the structure of the CA certificate used for
diff --git a/access_custom_page.go b/access_custom_page.go
deleted file mode 100644
index cb7e2ccb2..000000000
--- a/access_custom_page.go
+++ /dev/null
@@ -1,127 +0,0 @@
-package cloudflare
-
-import (
-	"context"
-	"errors"
-	"fmt"
-	"net/http"
-
-	"github.com/goccy/go-json"
-)
-
-var ErrMissingUID = errors.New("required UID missing")
-
-type AccessCustomPageType string
-
-const (
-	Forbidden      AccessCustomPageType = "forbidden"
-	IdentityDenied AccessCustomPageType = "identity_denied"
-)
-
-type AccessCustomPage struct {
-	// The HTML content of the custom page.
-	CustomHTML string               `json:"custom_html,omitempty"`
-	Name       string               `json:"name,omitempty"`
-	AppCount   int                  `json:"app_count,omitempty"`
-	Type       AccessCustomPageType `json:"type,omitempty"`
-	UID        string               `json:"uid,omitempty"`
-}
-
-type AccessCustomPageListResponse struct {
-	Response
-	Result     []AccessCustomPage `json:"result"`
-	ResultInfo `json:"result_info"`
-}
-
-type AccessCustomPageResponse struct {
-	Response
-	Result AccessCustomPage `json:"result"`
-}
-
-type ListAccessCustomPagesParams struct{}
-
-type CreateAccessCustomPageParams struct {
-	CustomHTML string               `json:"custom_html,omitempty"`
-	Name       string               `json:"name,omitempty"`
-	Type       AccessCustomPageType `json:"type,omitempty"`
-}
-
-type UpdateAccessCustomPageParams struct {
-	CustomHTML string               `json:"custom_html,omitempty"`
-	Name       string               `json:"name,omitempty"`
-	Type       AccessCustomPageType `json:"type,omitempty"`
-	UID        string               `json:"uid,omitempty"`
-}
-
-func (api *API) ListAccessCustomPages(ctx context.Context, rc *ResourceContainer, params ListAccessCustomPagesParams) ([]AccessCustomPage, error) {
-	uri := buildURI(fmt.Sprintf("/%s/%s/access/custom_pages", rc.Level, rc.Identifier), params)
-	res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
-	if err != nil {
-		return []AccessCustomPage{}, err
-	}
-
-	var customPagesResponse AccessCustomPageListResponse
-	err = json.Unmarshal(res, &customPagesResponse)
-	if err != nil {
-		return []AccessCustomPage{}, err
-	}
-	return customPagesResponse.Result, nil
-}
-
-func (api *API) GetAccessCustomPage(ctx context.Context, rc *ResourceContainer, id string) (AccessCustomPage, error) {
-	uri := fmt.Sprintf("/%s/%s/access/custom_pages/%s", rc.Level, rc.Identifier, id)
-	res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
-	if err != nil {
-		return AccessCustomPage{}, err
-	}
-
-	var customPageResponse AccessCustomPageResponse
-	err = json.Unmarshal(res, &customPageResponse)
-	if err != nil {
-		return AccessCustomPage{}, err
-	}
-	return customPageResponse.Result, nil
-}
-
-func (api *API) CreateAccessCustomPage(ctx context.Context, rc *ResourceContainer, params CreateAccessCustomPageParams) (AccessCustomPage, error) {
-	uri := fmt.Sprintf("/%s/%s/access/custom_pages", rc.Level, rc.Identifier)
-	res, err := api.makeRequestContext(ctx, http.MethodPost, uri, params)
-	if err != nil {
-		return AccessCustomPage{}, err
-	}
-
-	var customPageResponse AccessCustomPageResponse
-	err = json.Unmarshal(res, &customPageResponse)
-	if err != nil {
-		return AccessCustomPage{}, err
-	}
-	return customPageResponse.Result, nil
-}
-
-func (api *API) DeleteAccessCustomPage(ctx context.Context, rc *ResourceContainer, id string) error {
-	uri := fmt.Sprintf("/%s/%s/access/custom_pages/%s", rc.Level, rc.Identifier, id)
-	_, err := api.makeRequestContext(ctx, http.MethodDelete, uri, nil)
-	if err != nil {
-		return err
-	}
-	return nil
-}
-
-func (api *API) UpdateAccessCustomPage(ctx context.Context, rc *ResourceContainer, params UpdateAccessCustomPageParams) (AccessCustomPage, error) {
-	if params.UID == "" {
-		return AccessCustomPage{}, ErrMissingUID
-	}
-
-	uri := fmt.Sprintf("/%s/%s/access/custom_pages/%s", rc.Level, rc.Identifier, params.UID)
-	res, err := api.makeRequestContext(ctx, http.MethodPut, uri, params)
-	if err != nil {
-		return AccessCustomPage{}, err
-	}
-
-	var customPageResponse AccessCustomPageResponse
-	err = json.Unmarshal(res, &customPageResponse)
-	if err != nil {
-		return AccessCustomPage{}, err
-	}
-	return customPageResponse.Result, nil
-}
diff --git a/access_group.go b/access_group.go
index c374369c5..c21a80eeb 100644
--- a/access_group.go
+++ b/access_group.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // AccessGroup defines a group for allowing or disallowing access to
diff --git a/access_identity_provider.go b/access_identity_provider.go
index 5e11451a2..c248bc896 100644
--- a/access_identity_provider.go
+++ b/access_identity_provider.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // AccessIdentityProvider is the structure of the provider object.
diff --git a/access_keys.go b/access_keys.go
index fbc714def..2edca03e6 100644
--- a/access_keys.go
+++ b/access_keys.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 type AccessKeysConfig struct {
diff --git a/access_mutual_tls_certificates.go b/access_mutual_tls_certificates.go
index a7f29a6a9..ae80f9801 100644
--- a/access_mutual_tls_certificates.go
+++ b/access_mutual_tls_certificates.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // AccessMutualTLSCertificate is the structure of a single Access Mutual TLS
diff --git a/access_organization.go b/access_organization.go
index ef48e2f22..d7f616cf5 100644
--- a/access_organization.go
+++ b/access_organization.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // AccessOrganization represents an Access organization.
@@ -20,7 +19,6 @@ type AccessOrganization struct {
 	UIReadOnlyToggleReason         string                        `json:"ui_read_only_toggle_reason,omitempty"`
 	UserSeatExpirationInactiveTime string                        `json:"user_seat_expiration_inactive_time,omitempty"`
 	AutoRedirectToIdentity         *bool                         `json:"auto_redirect_to_identity,omitempty"`
-	CustomPages                    AccessOrganizationCustomPages `json:"custom_pages,omitempty"`
 }
 
 // AccessOrganizationLoginDesign represents the login design options.
@@ -32,11 +30,6 @@ type AccessOrganizationLoginDesign struct {
 	FooterText      string `json:"footer_text"`
 }
 
-type AccessOrganizationCustomPages struct {
-	Forbidden      AccessCustomPageType `json:"forbidden,omitempty"`
-	IdentityDenied AccessCustomPageType `json:"identity_denied,omitempty"`
-}
-
 // AccessOrganizationListResponse represents the response from the list
 // access organization endpoint.
 type AccessOrganizationListResponse struct {
@@ -64,7 +57,6 @@ type CreateAccessOrganizationParams struct {
 	UIReadOnlyToggleReason         string                        `json:"ui_read_only_toggle_reason,omitempty"`
 	UserSeatExpirationInactiveTime string                        `json:"user_seat_expiration_inactive_time,omitempty"`
 	AutoRedirectToIdentity         *bool                         `json:"auto_redirect_to_identity,omitempty"`
-	CustomPages                    AccessOrganizationCustomPages `json:"custom_pages,omitempty"`
 }
 
 type UpdateAccessOrganizationParams struct {
@@ -75,7 +67,6 @@ type UpdateAccessOrganizationParams struct {
 	UIReadOnlyToggleReason         string                        `json:"ui_read_only_toggle_reason,omitempty"`
 	UserSeatExpirationInactiveTime string                        `json:"user_seat_expiration_inactive_time,omitempty"`
 	AutoRedirectToIdentity         *bool                         `json:"auto_redirect_to_identity,omitempty"`
-	CustomPages                    AccessOrganizationCustomPages `json:"custom_pages,omitempty"`
 }
 
 func (api *API) GetAccessOrganization(ctx context.Context, rc *ResourceContainer, params GetAccessOrganizationParams) (AccessOrganization, ResultInfo, error) {
diff --git a/access_policy.go b/access_policy.go
index b5102e429..f7da401fb 100644
--- a/access_policy.go
+++ b/access_policy.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 var (
diff --git a/access_service_tokens.go b/access_service_tokens.go
index 61e1fb404..d3a4d66f8 100644
--- a/access_service_tokens.go
+++ b/access_service_tokens.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 var (
diff --git a/account_members.go b/account_members.go
index d6ecab560..d197fda1d 100644
--- a/account_members.go
+++ b/account_members.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // AccountMember is the definition of a member of an account.
diff --git a/account_roles.go b/account_roles.go
index dec1da81c..2f51b3731 100644
--- a/account_roles.go
+++ b/account_roles.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // AccountRole defines the roles that a member can have attached.
diff --git a/accounts.go b/accounts.go
index aee3c6aef..7cca6e7b8 100644
--- a/accounts.go
+++ b/accounts.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // AccountSettings outlines the available options for an account.
diff --git a/addressing_address_map.go b/addressing_address_map.go
index 0109e79bb..93f9f9687 100644
--- a/addressing_address_map.go
+++ b/addressing_address_map.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // AddressMap contains information about an address map.
diff --git a/addressing_ip_prefix.go b/addressing_ip_prefix.go
index a2e686c3b..52b71e93f 100644
--- a/addressing_ip_prefix.go
+++ b/addressing_ip_prefix.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // IPPrefix contains information about an IP prefix.
diff --git a/api_shield.go b/api_shield.go
index 622631c26..4071508cb 100644
--- a/api_shield.go
+++ b/api_shield.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // AuthIdCharacteristics a single option from
diff --git a/api_token.go b/api_token.go
index 92554774d..41bd85db3 100644
--- a/api_token.go
+++ b/api_token.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // APIToken is the full API token.
diff --git a/argo.go b/argo.go
index d789257a4..c72922fd7 100644
--- a/argo.go
+++ b/argo.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 var validSettingValues = []string{"on", "off"}
diff --git a/argo_tunnel.go b/argo_tunnel.go
index fa444f0ea..89f6ae8cc 100644
--- a/argo_tunnel.go
+++ b/argo_tunnel.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // ArgoTunnel is the struct definition of a tunnel.
diff --git a/auditlogs.go b/auditlogs.go
index c21398a26..34e76b027 100644
--- a/auditlogs.go
+++ b/auditlogs.go
@@ -2,13 +2,12 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"net/http"
 	"net/url"
 	"path"
 	"strconv"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // AuditLogAction is a member of AuditLog, the action that was taken.
diff --git a/authenticated_origin_pulls.go b/authenticated_origin_pulls.go
index ff46549ce..2936f65bd 100644
--- a/authenticated_origin_pulls.go
+++ b/authenticated_origin_pulls.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // AuthenticatedOriginPulls represents global AuthenticatedOriginPulls (tls_client_auth) metadata.
diff --git a/authenticated_origin_pulls_per_hostname.go b/authenticated_origin_pulls_per_hostname.go
index c8ea3eccb..8a488c578 100644
--- a/authenticated_origin_pulls_per_hostname.go
+++ b/authenticated_origin_pulls_per_hostname.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // PerHostnameAuthenticatedOriginPullsCertificateDetails represents the metadata for a Per Hostname AuthenticatedOriginPulls certificate.
diff --git a/authenticated_origin_pulls_per_zone.go b/authenticated_origin_pulls_per_zone.go
index a72b34e0c..654311940 100644
--- a/authenticated_origin_pulls_per_zone.go
+++ b/authenticated_origin_pulls_per_zone.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // PerZoneAuthenticatedOriginPullsSettings represents the settings for Per Zone AuthenticatedOriginPulls.
diff --git a/cache_reserve.go b/cache_reserve.go
index 64e74b39a..a62a6144a 100644
--- a/cache_reserve.go
+++ b/cache_reserve.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // CacheReserve is the structure of the API object for the cache reserve
diff --git a/certificate_packs.go b/certificate_packs.go
index 2fee1d674..802ed5dfe 100644
--- a/certificate_packs.go
+++ b/certificate_packs.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // CertificatePackGeoRestrictions is for the structure of the geographic
diff --git a/cloudflare.go b/cloudflare.go
index b70253eec..2231bd79f 100644
--- a/cloudflare.go
+++ b/cloudflare.go
@@ -4,6 +4,7 @@ package cloudflare
 import (
 	"bytes"
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"io"
@@ -17,8 +18,6 @@ import (
 	"strings"
 	"time"
 
-	"github.com/goccy/go-json"
-
 	"golang.org/x/time/rate"
 )
 
diff --git a/cloudflare_experimental.go b/cloudflare_experimental.go
index c09e803a5..c4bc4934e 100644
--- a/cloudflare_experimental.go
+++ b/cloudflare_experimental.go
@@ -3,6 +3,7 @@ package cloudflare
 import (
 	"bytes"
 	"context"
+	"encoding/json"
 	"fmt"
 	"io"
 	"log"
@@ -14,8 +15,6 @@ import (
 	"sync"
 	"time"
 
-	"github.com/goccy/go-json"
-
 	"github.com/hashicorp/go-retryablehttp"
 )
 
diff --git a/cmd/flarectl/misc.go b/cmd/flarectl/misc.go
index d6d4357c3..4f8372c3d 100644
--- a/cmd/flarectl/misc.go
+++ b/cmd/flarectl/misc.go
@@ -2,13 +2,13 @@ package main
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"os"
 	"strings"
 
 	cloudflare "github.com/cloudflare/cloudflare-go"
-	"github.com/goccy/go-json"
 	"github.com/olekukonko/tablewriter"
 	"github.com/urfave/cli/v2"
 )
diff --git a/custom_hostname.go b/custom_hostname.go
index b625b7232..0404a0745 100644
--- a/custom_hostname.go
+++ b/custom_hostname.go
@@ -2,14 +2,13 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"net/url"
 	"strconv"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // CustomHostnameStatus is the enumeration of valid state values in the CustomHostnameSSL.
diff --git a/custom_nameservers.go b/custom_nameservers.go
index 95719297c..45150a211 100644
--- a/custom_nameservers.go
+++ b/custom_nameservers.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 type CustomNameserverRecord struct {
diff --git a/custom_pages.go b/custom_pages.go
index ae68d680f..9f60222b3 100644
--- a/custom_pages.go
+++ b/custom_pages.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // CustomPage represents a custom page configuration.
diff --git a/device_posture_rule.go b/device_posture_rule.go
index 5b6bfd048..827b82670 100644
--- a/device_posture_rule.go
+++ b/device_posture_rule.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // DevicePostureIntegrationConfig contains authentication information
diff --git a/devices_dex.go b/devices_dex.go
index 4c9ef5070..f95cb9b5c 100644
--- a/devices_dex.go
+++ b/devices_dex.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 type DeviceDexTestData map[string]interface{}
diff --git a/devices_managed_networks.go b/devices_managed_networks.go
index 11fc7ea10..2e308eb21 100644
--- a/devices_managed_networks.go
+++ b/devices_managed_networks.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 type Config struct {
diff --git a/devices_policy.go b/devices_policy.go
index 77eaf112d..3b7dbcddf 100644
--- a/devices_policy.go
+++ b/devices_policy.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 type Enabled struct {
diff --git a/diagnostics.go b/diagnostics.go
index 4eb8e7165..a6a8bfeda 100644
--- a/diagnostics.go
+++ b/diagnostics.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // DiagnosticsTracerouteConfiguration is the overarching structure of the
diff --git a/dlp_payload_log.go b/dlp_payload_log.go
index 80123b459..34f37ca8c 100644
--- a/dlp_payload_log.go
+++ b/dlp_payload_log.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 type DLPPayloadLogSettings struct {
diff --git a/dlp_profile.go b/dlp_profile.go
index 28e0c6677..4eb0b5ff5 100644
--- a/dlp_profile.go
+++ b/dlp_profile.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 var (
diff --git a/dns.go b/dns.go
index 842fa2f2f..cee3b1d9d 100644
--- a/dns.go
+++ b/dns.go
@@ -3,6 +3,7 @@ package cloudflare
 import (
 	"bytes"
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
@@ -10,7 +11,6 @@ import (
 	"strings"
 	"time"
 
-	"github.com/goccy/go-json"
 	"golang.org/x/net/idna"
 )
 
diff --git a/dns_firewall.go b/dns_firewall.go
index 090b24c98..064da15c7 100644
--- a/dns_firewall.go
+++ b/dns_firewall.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 var ErrMissingClusterID = errors.New("missing required cluster ID")
diff --git a/duration.go b/duration.go
index 2e39d5ed4..ba2418acd 100644
--- a/duration.go
+++ b/duration.go
@@ -1,9 +1,8 @@
 package cloudflare
 
 import (
+	"encoding/json"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // Duration implements json.Marshaler and json.Unmarshaler for time.Duration
diff --git a/email_routing_destination.go b/email_routing_destination.go
index 3ad0284dc..75e79ea50 100644
--- a/email_routing_destination.go
+++ b/email_routing_destination.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 type EmailRoutingDestinationAddress struct {
diff --git a/email_routing_rules.go b/email_routing_rules.go
index 736200d04..a6c075f82 100644
--- a/email_routing_rules.go
+++ b/email_routing_rules.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 var ErrMissingRuleID = errors.New("required rule id missing")
diff --git a/email_routing_settings.go b/email_routing_settings.go
index 20fc3eaf8..9e27c0c21 100644
--- a/email_routing_settings.go
+++ b/email_routing_settings.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 type EmailRoutingSettings struct {
diff --git a/fallback_domain.go b/fallback_domain.go
index e8bdfc937..e0b9132ea 100644
--- a/fallback_domain.go
+++ b/fallback_domain.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // FallbackDomainResponse represents the response from the get fallback
diff --git a/filter.go b/filter.go
index 107cab544..b5f084648 100644
--- a/filter.go
+++ b/filter.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"net/url"
-
-	"github.com/goccy/go-json"
 )
 
 var ErrNotEnoughFilterIDsProvided = errors.New("at least one filter ID must be provided.")
diff --git a/firewall.go b/firewall.go
index 893165c57..51f004a62 100644
--- a/firewall.go
+++ b/firewall.go
@@ -2,13 +2,12 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"net/url"
 	"strconv"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // AccessRule represents a firewall access rule.
diff --git a/firewall_rules.go b/firewall_rules.go
index edcd2a0b9..51b4ae87e 100644
--- a/firewall_rules.go
+++ b/firewall_rules.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"net/url"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // FirewallRule is the struct of the firewall rule.
diff --git a/go.mod b/go.mod
index 5d1a58550..cca49c771 100644
--- a/go.mod
+++ b/go.mod
@@ -8,7 +8,7 @@ require (
 	github.com/olekukonko/tablewriter v0.0.5
 	github.com/stretchr/testify v1.8.4
 	github.com/urfave/cli/v2 v2.25.7
-	golang.org/x/net v0.13.0
+	golang.org/x/net v0.12.0
 	golang.org/x/time v0.3.0
 )
 
@@ -18,7 +18,6 @@ require (
 	github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
 	github.com/davecgh/go-spew v1.1.1 // indirect
 	github.com/fatih/color v1.13.0 // indirect
-	github.com/goccy/go-json v0.10.2 // indirect
 	github.com/google/go-cmp v0.5.8 // indirect
 	github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
 	github.com/hashicorp/go-hclog v1.2.0 // indirect
diff --git a/go.sum b/go.sum
index 74976b20f..b47e6c7b0 100644
--- a/go.sum
+++ b/go.sum
@@ -6,8 +6,6 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
 github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
 github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
-github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
-github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
 github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
@@ -59,8 +57,8 @@ github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs=
 github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ=
 github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
 github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
-golang.org/x/net v0.13.0 h1:Nvo8UFsZ8X3BhAC9699Z1j7XQ3rsZnUUm7jfBEk1ueY=
-golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
+golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50=
+golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
 golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
diff --git a/healthchecks.go b/healthchecks.go
index cd5acd154..1239d012c 100644
--- a/healthchecks.go
+++ b/healthchecks.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // Healthcheck describes a Healthcheck object.
diff --git a/images.go b/images.go
index 12dea5ded..59209ad1f 100644
--- a/images.go
+++ b/images.go
@@ -3,14 +3,13 @@ package cloudflare
 import (
 	"bytes"
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"io"
 	"mime/multipart"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 var (
diff --git a/intelligence_asn.go b/intelligence_asn.go
index f66cdff68..04e8e5aa0 100644
--- a/intelligence_asn.go
+++ b/intelligence_asn.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // ErrMissingASN is for when ASN is required but not set.
diff --git a/intelligence_domain.go b/intelligence_domain.go
index b12b2c8ee..abbafba2d 100644
--- a/intelligence_domain.go
+++ b/intelligence_domain.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // ErrMissingDomain is for when domain is needed but not given.
diff --git a/intelligence_ip.go b/intelligence_ip.go
index 47c74b30e..1a8948b7a 100644
--- a/intelligence_ip.go
+++ b/intelligence_ip.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // IPIntelligence represents IP intelligence information.
diff --git a/intelligence_phishing.go b/intelligence_phishing.go
index ceb3f497e..2d649ffc5 100644
--- a/intelligence_phishing.go
+++ b/intelligence_phishing.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // PhishingScan represent information about a phishing scan.
diff --git a/intelligence_whois.go b/intelligence_whois.go
index 72a3a6136..a3bda99b9 100644
--- a/intelligence_whois.go
+++ b/intelligence_whois.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // WHOIS represents whois information.
diff --git a/internal/tools/tools.go b/internal/tools/tools.go
index 518bba63e..336d01f4f 100644
--- a/internal/tools/tools.go
+++ b/internal/tools/tools.go
@@ -19,7 +19,6 @@ package tools
 //go:generate go install golang.org/x/lint/golint
 //go:generate go install golang.org/x/oauth2
 //go:generate go install golang.org/x/tools/gopls@latest
-//go:generate go install golang.org/x/tools/cmd/goimports@latest
 
 import (
 	// local development tooling for linting and debugging.
@@ -36,7 +35,6 @@ import (
 	_ "github.com/securego/gosec/v2/cmd/gosec"
 	_ "github.com/uudashr/gopkgs/v2/cmd/gopkgs"
 	_ "golang.org/x/lint/golint"
-	_ "golang.org/x/tools/cmd/goimports@latest"
 	_ "golang.org/x/tools/gopls"
 
 	// used for changelog-check tooling
diff --git a/ip_list.go b/ip_list.go
index a9c5e7151..d2f6a92ac 100644
--- a/ip_list.go
+++ b/ip_list.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // The definitions in this file are deprecated and should be removed after
diff --git a/ips.go b/ips.go
index dfdda1158..85d1c5bbd 100644
--- a/ips.go
+++ b/ips.go
@@ -1,12 +1,11 @@
 package cloudflare
 
 import (
+	"encoding/json"
 	"fmt"
 	"io"
 	"net/http"
 	"strings"
-
-	"github.com/goccy/go-json"
 )
 
 // IPRangesResponse contains the structure for the API response, not modified.
diff --git a/keyless.go b/keyless.go
index 39896af9b..2171d4ab3 100644
--- a/keyless.go
+++ b/keyless.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // KeylessSSL represents Keyless SSL configuration.
diff --git a/list.go b/list.go
index e7893c352..6cd9fe986 100644
--- a/list.go
+++ b/list.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 const (
diff --git a/load_balancing.go b/load_balancing.go
index d23a2a961..3841940ba 100644
--- a/load_balancing.go
+++ b/load_balancing.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // LoadBalancerPool represents a load balancer pool's properties.
@@ -18,7 +17,7 @@ type LoadBalancerPool struct {
 	Description       string                      `json:"description"`
 	Name              string                      `json:"name"`
 	Enabled           bool                        `json:"enabled"`
-	MinimumOrigins    *int                        `json:"minimum_origins,omitempty"`
+	MinimumOrigins    int                         `json:"minimum_origins,omitempty"`
 	Monitor           string                      `json:"monitor,omitempty"`
 	Origins           []LoadBalancerOrigin        `json:"origins"`
 	NotificationEmail string                      `json:"notification_email,omitempty"`
diff --git a/lockdown.go b/lockdown.go
index b7c76320e..a946e5a21 100644
--- a/lockdown.go
+++ b/lockdown.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // ZoneLockdown represents a Zone Lockdown rule. A rule only permits access to
diff --git a/logpull.go b/logpull.go
index d36911595..b458ac807 100644
--- a/logpull.go
+++ b/logpull.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // LogpullRetentionConfiguration describes a the structure of a Logpull Retention
diff --git a/logpush.go b/logpush.go
index 3fbb1af50..8ddf4c219 100644
--- a/logpush.go
+++ b/logpush.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // LogpushJob describes a Logpush job.
diff --git a/magic_firewall_rulesets.go b/magic_firewall_rulesets.go
index 1851198be..791f39703 100644
--- a/magic_firewall_rulesets.go
+++ b/magic_firewall_rulesets.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 const (
diff --git a/magic_transit_gre_tunnel.go b/magic_transit_gre_tunnel.go
index 52e24d5f1..fcab192c8 100644
--- a/magic_transit_gre_tunnel.go
+++ b/magic_transit_gre_tunnel.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // Magic Transit GRE Tunnel Error messages.
diff --git a/magic_transit_ipsec_tunnel.go b/magic_transit_ipsec_tunnel.go
index 0cfb46443..6ac5f22c2 100644
--- a/magic_transit_ipsec_tunnel.go
+++ b/magic_transit_ipsec_tunnel.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // Magic Transit IPsec Tunnel Error messages.
diff --git a/magic_transit_static_routes.go b/magic_transit_static_routes.go
index 3554a9d16..1cce6cc92 100644
--- a/magic_transit_static_routes.go
+++ b/magic_transit_static_routes.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // Magic Transit Static Routes Error messages.
diff --git a/managed_headers.go b/managed_headers.go
index 54de0dd8e..11b2941d5 100644
--- a/managed_headers.go
+++ b/managed_headers.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 type ListManagedHeadersResponse struct {
diff --git a/mtls_certificates.go b/mtls_certificates.go
index 4ab8794f9..5d92bd2dd 100644
--- a/mtls_certificates.go
+++ b/mtls_certificates.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // MTLSAssociation represents the metadata for an existing association
diff --git a/notifications.go b/notifications.go
index 7afd66f1f..6d449c3d3 100644
--- a/notifications.go
+++ b/notifications.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // NotificationMechanismData holds a single public facing mechanism data
diff --git a/options.go b/options.go
index 0638a2d5c..7754badbe 100644
--- a/options.go
+++ b/options.go
@@ -2,6 +2,7 @@ package cloudflare
 
 import (
 	"net/http"
+
 	"time"
 
 	"golang.org/x/time/rate"
diff --git a/origin_ca.go b/origin_ca.go
index ff8589a3c..45c895157 100644
--- a/origin_ca.go
+++ b/origin_ca.go
@@ -2,13 +2,12 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"io"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // OriginCACertificate represents a Cloudflare-issued certificate.
@@ -39,13 +38,13 @@ type CreateOriginCertificateParams struct {
 // UnmarshalJSON handles custom parsing from an API response to an OriginCACertificate
 // http://choly.ca/post/go-json-marshalling/
 func (c *OriginCACertificate) UnmarshalJSON(data []byte) error {
-	type Alias OriginCACertificate
+	type alias OriginCACertificate
 
 	aux := &struct {
 		ExpiresOn string `json:"expires_on"`
-		*Alias
+		*alias
 	}{
-		Alias: (*Alias)(c),
+		alias: (*alias)(c),
 	}
 
 	var err error
diff --git a/page_rules.go b/page_rules.go
index c4fa391f5..033bd7fd2 100644
--- a/page_rules.go
+++ b/page_rules.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // PageRuleTarget is the target to evaluate on a request.
diff --git a/pages_deployment.go b/pages_deployment.go
index b81a2c1b7..899e89100 100644
--- a/pages_deployment.go
+++ b/pages_deployment.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // SizeOptions can be passed to a list request to configure size and cursor location.
diff --git a/pages_domain.go b/pages_domain.go
index a6fa8ac9f..7d80d6e85 100644
--- a/pages_domain.go
+++ b/pages_domain.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // PagesDomain represents a pages domain.
diff --git a/pages_project.go b/pages_project.go
index 9beceb9ef..94c67b242 100644
--- a/pages_project.go
+++ b/pages_project.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 type PagesPreviewDeploymentSetting string
diff --git a/permission_group.go b/permission_group.go
index 9fa7aa315..c6468d006 100644
--- a/permission_group.go
+++ b/permission_group.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 type PermissionGroup struct {
diff --git a/queue.go b/queue.go
index 9f6d6e121..771a1f148 100644
--- a/queue.go
+++ b/queue.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 var (
diff --git a/r2_bucket.go b/r2_bucket.go
index c9ce8fe0f..046438f09 100644
--- a/r2_bucket.go
+++ b/r2_bucket.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 var (
diff --git a/rate_limiting.go b/rate_limiting.go
index 1a9f5cb44..d40ae7311 100644
--- a/rate_limiting.go
+++ b/rate_limiting.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // RateLimit is a policy than can be applied to limit traffic within a customer domain.
diff --git a/regional_hostnames.go b/regional_hostnames.go
index 51227709a..72d6dcc11 100644
--- a/regional_hostnames.go
+++ b/regional_hostnames.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 type Region struct {
diff --git a/regional_tiered_cache.go b/regional_tiered_cache.go
index eb3254be2..31471178a 100644
--- a/regional_tiered_cache.go
+++ b/regional_tiered_cache.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // RegionalTieredCache is the structure of the API object for the regional tiered cache
diff --git a/registrar.go b/registrar.go
index 2be3ca8bf..e0a210f01 100644
--- a/registrar.go
+++ b/registrar.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // RegistrarDomain is the structure of the API response for a new
diff --git a/rulesets.go b/rulesets.go
index 61f6c33c5..80ebed208 100644
--- a/rulesets.go
+++ b/rulesets.go
@@ -2,13 +2,12 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"strings"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 var (
@@ -19,6 +18,7 @@ const (
 	RulesetKindCustom  RulesetKind = "custom"
 	RulesetKindManaged RulesetKind = "managed"
 	RulesetKindRoot    RulesetKind = "root"
+	RulesetKindSchema  RulesetKind = "schema"
 	RulesetKindZone    RulesetKind = "zone"
 
 	RulesetPhaseDDoSL4                              RulesetPhase = "ddos_l4"
@@ -85,6 +85,7 @@ func RulesetKindValues() []string {
 		string(RulesetKindCustom),
 		string(RulesetKindManaged),
 		string(RulesetKindRoot),
+		string(RulesetKindSchema),
 		string(RulesetKindZone),
 	}
 }
@@ -717,11 +718,13 @@ type UpdateRulesetResponse struct {
 type ListRulesetsParams struct{}
 
 type CreateRulesetParams struct {
-	Name        string        `json:"name,omitempty"`
-	Description string        `json:"description,omitempty"`
-	Kind        string        `json:"kind,omitempty"`
-	Phase       string        `json:"phase,omitempty"`
-	Rules       []RulesetRule `json:"rules"`
+	Name                     string        `json:"name,omitempty"`
+	Description              string        `json:"description,omitempty"`
+	Kind                     string        `json:"kind,omitempty"`
+	Version                  *string       `json:"version,omitempty"`
+	Phase                    string        `json:"phase,omitempty"`
+	Rules                    []RulesetRule `json:"rules"`
+	ShareableEntitlementName string        `json:"shareable_entitlement_name,omitempty"`
 }
 
 type UpdateRulesetParams struct {
@@ -731,16 +734,19 @@ type UpdateRulesetParams struct {
 }
 
 type UpdateEntrypointRulesetParams struct {
-	Phase       string        `json:"-"`
+	Name        string        `json:"name,omitempty"`
 	Description string        `json:"description,omitempty"`
+	Kind        string        `json:"kind,omitempty"`
+	Version     *string       `json:"version,omitempty"`
+	Phase       string        `json:"-"`
 	Rules       []RulesetRule `json:"rules"`
 }
 
-// ListRulesets lists all Rulesets in a given zone or account depending on the
+// ListRulesets lists all Rulesets for a given zone or account depending on the
 // ResourceContainer type provided.
 //
-// API reference: https://developers.cloudflare.com/api/operations/listAccountRulesets
-// API reference: https://developers.cloudflare.com/api/operations/listZoneRulesets
+// API reference: https://api.cloudflare.com/#zone-rulesets-list-zone-rulesets
+// API reference: https://api.cloudflare.com/#account-rulesets-list-account-rulesets
 func (api *API) ListRulesets(ctx context.Context, rc *ResourceContainer, params ListRulesetsParams) ([]Ruleset, error) {
 	uri := fmt.Sprintf("/%s/%s/rulesets", rc.Level, rc.Identifier)
 
@@ -759,8 +765,8 @@ func (api *API) ListRulesets(ctx context.Context, rc *ResourceContainer, params
 
 // GetRuleset fetches a single ruleset.
 //
-// API reference: https://developers.cloudflare.com/api/operations/getAccountRuleset
-// API reference: https://developers.cloudflare.com/api/operations/getZoneRuleset
+// API reference: https://api.cloudflare.com/#zone-rulesets-get-a-zone-ruleset
+// API reference: https://api.cloudflare.com/#account-rulesets-get-an-account-ruleset
 func (api *API) GetRuleset(ctx context.Context, rc *ResourceContainer, rulesetID string) (Ruleset, error) {
 	uri := fmt.Sprintf("/%s/%s/rulesets/%s", rc.Level, rc.Identifier, rulesetID)
 	res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
@@ -776,10 +782,10 @@ func (api *API) GetRuleset(ctx context.Context, rc *ResourceContainer, rulesetID
 	return result.Result, nil
 }
 
-// CreateRuleset creates a new ruleset.
+// CreateRuleset initialises a new ruleset.
 //
-// API reference: https://developers.cloudflare.com/api/operations/createAccountRuleset
-// API reference: https://developers.cloudflare.com/api/operations/createZoneRuleset
+// API reference: https://api.cloudflare.com/#zone-rulesets-create-zone-ruleset
+// API reference: https://api.cloudflare.com/#account-rulesets-create-account-ruleset
 func (api *API) CreateRuleset(ctx context.Context, rc *ResourceContainer, params CreateRulesetParams) (Ruleset, error) {
 	uri := fmt.Sprintf("/%s/%s/rulesets", rc.Level, rc.Identifier)
 	res, err := api.makeRequestContext(ctx, http.MethodPost, uri, params)
@@ -797,8 +803,8 @@ func (api *API) CreateRuleset(ctx context.Context, rc *ResourceContainer, params
 
 // DeleteRuleset removes a ruleset based on the ruleset ID.
 //
-// API reference: https://developers.cloudflare.com/api/operations/deleteAccountRuleset
-// API reference: https://developers.cloudflare.com/api/operations/deleteZoneRuleset
+// API reference: https://api.cloudflare.com/#zone-rulesets-delete-zone-ruleset
+// API reference: https://api.cloudflare.com/#account-rulesets-delete-account-ruleset
 func (api *API) DeleteRuleset(ctx context.Context, rc *ResourceContainer, rulesetID string) error {
 	uri := fmt.Sprintf("/%s/%s/rulesets/%s", rc.Level, rc.Identifier, rulesetID)
 	res, err := api.makeRequestContext(ctx, http.MethodDelete, uri, nil)
@@ -818,8 +824,8 @@ func (api *API) DeleteRuleset(ctx context.Context, rc *ResourceContainer, rulese
 
 // UpdateRuleset updates a ruleset based on the ruleset ID.
 //
-// API reference: https://developers.cloudflare.com/api/operations/updateAccountRuleset
-// API reference: https://developers.cloudflare.com/api/operations/updateZoneRuleset
+// API reference: https://api.cloudflare.com/#zone-rulesets-update-a-zone-ruleset
+// API reference: https://api.cloudflare.com/#account-rulesets-update-account-ruleset
 func (api *API) UpdateRuleset(ctx context.Context, rc *ResourceContainer, params UpdateRulesetParams) (Ruleset, error) {
 	if params.ID == "" {
 		return Ruleset{}, ErrMissingResourceIdentifier
@@ -839,10 +845,7 @@ func (api *API) UpdateRuleset(ctx context.Context, rc *ResourceContainer, params
 	return result.Result, nil
 }
 
-// GetEntrypointRuleset returns an entry point ruleset base on the phase.
-//
-// API reference: https://developers.cloudflare.com/api/operations/getAccountEntrypointRuleset
-// API reference: https://developers.cloudflare.com/api/operations/getZoneEntrypointRuleset
+// GetEntrypointRuleset returns a ruleset phase based on the resource entrypoint.
 func (api *API) GetEntrypointRuleset(ctx context.Context, rc *ResourceContainer, phase string) (Ruleset, error) {
 	uri := fmt.Sprintf("/%s/%s/rulesets/phases/%s/entrypoint", rc.Level, rc.Identifier, phase)
 	res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
@@ -858,11 +861,7 @@ func (api *API) GetEntrypointRuleset(ctx context.Context, rc *ResourceContainer,
 	return result.Result, nil
 }
 
-// UpdateEntrypointRuleset updates an entry point ruleset phase based on the
-// phase.
-//
-// API reference: https://developers.cloudflare.com/api/operations/updateAccountEntrypointRuleset
-// API reference: https://developers.cloudflare.com/api/operations/updateZoneEntrypointRuleset
+// UpdateEntrypointRuleset updates a ruleset phase based on the entrypoint.
 func (api *API) UpdateEntrypointRuleset(ctx context.Context, rc *ResourceContainer, params UpdateEntrypointRulesetParams) (Ruleset, error) {
 	if params.Phase == "" {
 		return Ruleset{}, ErrMissingRulesetPhase
diff --git a/secondary_dns_primaries.go b/secondary_dns_primaries.go
index 427a41aca..4aa623c3e 100644
--- a/secondary_dns_primaries.go
+++ b/secondary_dns_primaries.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 const (
diff --git a/secondary_dns_tsig.go b/secondary_dns_tsig.go
index 07b76bc09..ed9a4bc41 100644
--- a/secondary_dns_tsig.go
+++ b/secondary_dns_tsig.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 const (
diff --git a/secondary_dns_zone.go b/secondary_dns_zone.go
index 2371366c4..662a2f2bf 100644
--- a/secondary_dns_zone.go
+++ b/secondary_dns_zone.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 const (
diff --git a/spectrum.go b/spectrum.go
index 2ebfb41d5..8fe42b21e 100644
--- a/spectrum.go
+++ b/spectrum.go
@@ -2,6 +2,7 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net"
@@ -9,8 +10,6 @@ import (
 	"strconv"
 	"strings"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // ProxyProtocol implements json.Unmarshaler in order to support deserializing of the deprecated boolean
diff --git a/split_tunnel.go b/split_tunnel.go
index 3124aa74c..3855cae0f 100644
--- a/split_tunnel.go
+++ b/split_tunnel.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // SplitTunnelResponse represents the response from the get split
diff --git a/ssl.go b/ssl.go
index 3d1b5cfdb..178e98c6c 100644
--- a/ssl.go
+++ b/ssl.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // ZoneCustomSSL represents custom SSL certificate metadata.
diff --git a/stream.go b/stream.go
index c03c72239..9f81c61c3 100644
--- a/stream.go
+++ b/stream.go
@@ -3,6 +3,7 @@ package cloudflare
 import (
 	"bytes"
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"io"
@@ -10,8 +11,6 @@ import (
 	"net/http"
 	"os"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 var (
diff --git a/sts.go b/sts.go
index 350e5cb08..94b5666ec 100644
--- a/sts.go
+++ b/sts.go
@@ -1,13 +1,12 @@
 package cloudflare
 
 import (
+	"encoding/json"
 	"errors"
 	"fmt"
 	"io"
 	"net/http"
 
-	"github.com/goccy/go-json"
-
 	"github.com/hashicorp/go-retryablehttp"
 )
 
diff --git a/teams_accounts.go b/teams_accounts.go
index db63f0538..25a2c7eb2 100644
--- a/teams_accounts.go
+++ b/teams_accounts.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 type TeamsAccount struct {
diff --git a/teams_devices.go b/teams_devices.go
index 96ec4d08b..941a37670 100644
--- a/teams_devices.go
+++ b/teams_devices.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 type TeamsDevicesList struct {
diff --git a/teams_list.go b/teams_list.go
index 066d7afff..30c21d9d2 100644
--- a/teams_list.go
+++ b/teams_list.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 var ErrMissingListID = errors.New("required missing list ID")
diff --git a/teams_locations.go b/teams_locations.go
index 296d98b13..dab63b5c9 100644
--- a/teams_locations.go
+++ b/teams_locations.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 type TeamsLocationsListResponse struct {
diff --git a/teams_proxy_endpoints.go b/teams_proxy_endpoints.go
index 8a658e20e..e11aecd42 100644
--- a/teams_proxy_endpoints.go
+++ b/teams_proxy_endpoints.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 type TeamsProxyEndpointListResponse struct {
diff --git a/teams_rules.go b/teams_rules.go
index eaa5e8bba..d177e2c70 100644
--- a/teams_rules.go
+++ b/teams_rules.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 type TeamsRuleSettings struct {
diff --git a/tiered_cache.go b/tiered_cache.go
index a6e845084..77b0ce5bb 100644
--- a/tiered_cache.go
+++ b/tiered_cache.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 type TieredCacheType int
diff --git a/total_tls.go b/total_tls.go
index 5ea0bdb3b..98772e8b3 100644
--- a/total_tls.go
+++ b/total_tls.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 type TotalTLS struct {
diff --git a/tunnel.go b/tunnel.go
index e61116ae1..92e91b991 100644
--- a/tunnel.go
+++ b/tunnel.go
@@ -2,13 +2,12 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"strconv"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // A TunnelDuration is a Duration that has custom serialization for JSON.
diff --git a/tunnel_routes.go b/tunnel_routes.go
index c67925eba..0fba4eb3f 100644
--- a/tunnel_routes.go
+++ b/tunnel_routes.go
@@ -2,14 +2,13 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"net/url"
 	"strings"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 var (
diff --git a/tunnel_virtual_networks.go b/tunnel_virtual_networks.go
index 26a6875ac..a7ba6f408 100644
--- a/tunnel_virtual_networks.go
+++ b/tunnel_virtual_networks.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 var ErrMissingVnetName = errors.New("required missing virtual network name")
diff --git a/turnstile.go b/turnstile.go
index 5bc9273cd..84c0bdca5 100644
--- a/turnstile.go
+++ b/turnstile.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 var ErrMissingSiteKey = errors.New("required site key missing")
diff --git a/universal_ssl.go b/universal_ssl.go
index a0b7a1bb9..fed72d887 100644
--- a/universal_ssl.go
+++ b/universal_ssl.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // UniversalSSLSetting represents a universal ssl setting's properties.
diff --git a/url_normalization_settings.go b/url_normalization_settings.go
index c919100fa..c0247ceb9 100644
--- a/url_normalization_settings.go
+++ b/url_normalization_settings.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 type URLNormalizationSettings struct {
diff --git a/user.go b/user.go
index 90feb8990..08c2f07f2 100644
--- a/user.go
+++ b/user.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // User describes a user account.
diff --git a/user_agent.go b/user_agent.go
index 10449bbc0..8c1a39207 100644
--- a/user_agent.go
+++ b/user_agent.go
@@ -2,13 +2,12 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"net/url"
 	"strconv"
-
-	"github.com/goccy/go-json"
 )
 
 // UserAgentRule represents a User-Agent Block. These rules can be used to
diff --git a/waf.go b/waf.go
index c7a458a0c..7e81c6488 100644
--- a/waf.go
+++ b/waf.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"net/url"
 	"strconv"
-
-	"github.com/goccy/go-json"
 )
 
 // WAFPackage represents a WAF package configuration.
diff --git a/waf_overrides.go b/waf_overrides.go
index 665cb6168..76c0774f3 100644
--- a/waf_overrides.go
+++ b/waf_overrides.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // WAFOverridesResponse represents the response form the WAF overrides endpoint.
diff --git a/waiting_room.go b/waiting_room.go
index 7bd98d9a3..fe0ed76f1 100644
--- a/waiting_room.go
+++ b/waiting_room.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 var (
@@ -38,7 +37,6 @@ type WaitingRoom struct {
 	NextEventStartTime         *time.Time          `json:"next_event_start_time,omitempty"`
 	CookieSuffix               string              `json:"cookie_suffix"`
 	AdditionalRoutes           []*WaitingRoomRoute `json:"additional_routes,omitempty"`
-	QueueingStatusCode         int                 `json:"queueing_status_code"`
 }
 
 // WaitingRoomStatus describes the status of a waiting room.
diff --git a/web3.go b/web3.go
index 481a5332b..298771e5a 100644
--- a/web3.go
+++ b/web3.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 var (
diff --git a/workers.go b/workers.go
index 814f42517..2687ce39e 100644
--- a/workers.go
+++ b/workers.go
@@ -3,6 +3,7 @@ package cloudflare
 import (
 	"bytes"
 	"context"
+	"encoding/json"
 	"fmt"
 	"io"
 	"mime"
@@ -11,8 +12,6 @@ import (
 	"net/textproto"
 	"strings"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // WorkerRequestParams provides parameters for worker requests for both enterprise and standard requests.
@@ -60,6 +59,49 @@ type CreateWorkerParams struct {
 	Placement *Placement
 }
 
+type UpdateWorkersScriptContentParams struct {
+	ScriptName string
+	Script     string
+
+	// DispatchNamespaceName uploads the worker to a WFP dispatch namespace if provided
+	DispatchNamespaceName *string
+
+	// Module changes the Content-Type header to specify the script is an
+	// ES Module syntax script.
+	Module bool
+}
+
+type UpdateWorkersScriptSettingsParams struct {
+	ScriptName string
+
+	// Logpush opts the worker into Workers Logpush logging. A nil value leaves
+	// the current setting unchanged.
+	//
+	// Documentation: https://developers.cloudflare.com/workers/platform/logpush/
+	Logpush *bool
+
+	// TailConsumers specifies a list of Workers that will consume the logs of
+	// the attached Worker.
+	// Documentation: https://developers.cloudflare.com/workers/platform/tail-workers/
+	TailConsumers *[]WorkersTailConsumer
+
+	// Bindings should be a map where the keys are the binding name, and the
+	// values are the binding content
+	Bindings map[string]WorkerBinding
+
+	// CompatibilityDate is a date in the form yyyy-mm-dd,
+	// which will be used to determine which version of the Workers runtime is used.
+	//  https://developers.cloudflare.com/workers/platform/compatibility-dates/
+	CompatibilityDate string
+
+	// CompatibilityFlags are the names of features of the Workers runtime to be enabled or disabled,
+	// usually used together with CompatibilityDate.
+	//  https://developers.cloudflare.com/workers/platform/compatibility-dates/#compatibility-flags
+	CompatibilityFlags []string
+
+	Placement *Placement
+}
+
 // WorkerScriptParams provides a worker script and the associated bindings.
 type WorkerScriptParams struct {
 	ScriptName string
@@ -135,6 +177,12 @@ type WorkerScriptResponse struct {
 	WorkerScript `json:"result"`
 }
 
+// WorkerScriptSettingsResponse wrapper struct for API response to worker script settings calls.
+type WorkerScriptSettingsResponse struct {
+	Response
+	WorkerMetaData
+}
+
 type ListWorkersParams struct{}
 
 type DeleteWorkerParams struct {
@@ -154,7 +202,7 @@ type Placement struct {
 
 // DeleteWorker deletes a single Worker.
 //
-// API reference: https://api.cloudflare.com/#worker-script-delete-worker
+// API reference: https://developers.cloudflare.com/api/operations/worker-script-delete-worker
 func (api *API) DeleteWorker(ctx context.Context, rc *ResourceContainer, params DeleteWorkerParams) error {
 	if rc.Level != AccountRouteLevel {
 		return ErrRequiredAccountLevelResourceContainer
@@ -183,7 +231,7 @@ func (api *API) DeleteWorker(ctx context.Context, rc *ResourceContainer, params
 // GetWorker fetch raw script content for your worker returns string containing
 // worker code js.
 //
-// API reference: https://developers.cloudflare.com/workers/tooling/api/scripts/
+// API reference: https://developers.cloudflare.com/api/operations/worker-script-download-worker
 func (api *API) GetWorker(ctx context.Context, rc *ResourceContainer, scriptName string) (WorkerScriptResponse, error) {
 	if rc.Level != AccountRouteLevel {
 		return WorkerScriptResponse{}, ErrRequiredAccountLevelResourceContainer
@@ -226,7 +274,7 @@ func (api *API) GetWorker(ctx context.Context, rc *ResourceContainer, scriptName
 
 // ListWorkers returns list of Workers for given account.
 //
-// API reference: https://developers.cloudflare.com/workers/tooling/api/scripts/
+// API reference: https://developers.cloudflare.com/api/operations/worker-script-list-workers
 func (api *API) ListWorkers(ctx context.Context, rc *ResourceContainer, params ListWorkersParams) (WorkerListResponse, *ResultInfo, error) {
 	if rc.Level != AccountRouteLevel {
 		return WorkerListResponse{}, &ResultInfo{}, ErrRequiredAccountLevelResourceContainer
@@ -253,7 +301,7 @@ func (api *API) ListWorkers(ctx context.Context, rc *ResourceContainer, params L
 
 // UploadWorker pushes raw script content for your Worker.
 //
-// API reference: https://api.cloudflare.com/#worker-script-upload-worker
+// API reference: https://developers.cloudflare.com/api/operations/worker-script-upload-worker-module
 func (api *API) UploadWorker(ctx context.Context, rc *ResourceContainer, params CreateWorkerParams) (WorkerScriptResponse, error) {
 	if rc.Level != AccountRouteLevel {
 		return WorkerScriptResponse{}, ErrRequiredAccountLevelResourceContainer
@@ -278,7 +326,80 @@ func (api *API) UploadWorker(ctx context.Context, rc *ResourceContainer, params
 
 	uri := fmt.Sprintf("/accounts/%s/workers/scripts/%s", rc.Identifier, params.ScriptName)
 	if params.DispatchNamespaceName != nil {
-		uri = fmt.Sprintf("/accounts/%s/workers/dispatch/namespaces/%s/scripts/%s", rc.Identifier, *params.DispatchNamespaceName, params.ScriptName)
+		uri = fmt.Sprintf("/accounts/%s/workers/namespaces/%s/scripts/%s", rc.Identifier, *params.DispatchNamespaceName, params.ScriptName)
+	}
+
+	headers := make(http.Header)
+	headers.Set("Content-Type", contentType)
+	res, err := api.makeRequestContextWithHeaders(ctx, http.MethodPut, uri, body, headers)
+
+	var r WorkerScriptResponse
+	if err != nil {
+		return r, err
+	}
+
+	err = json.Unmarshal(res, &r)
+	if err != nil {
+		return r, fmt.Errorf("%s: %w", errUnmarshalError, err)
+	}
+
+	return r, nil
+}
+
+// GetWorkersScriptContent returns the pure script content of a worker.
+//
+// API reference: https://developers.cloudflare.com/api/operations/worker-script-get-content
+func (api *API) GetWorkersScriptContent(ctx context.Context, rc *ResourceContainer, scriptName string) (string, error) {
+	if rc.Level != AccountRouteLevel {
+		return "", ErrRequiredAccountLevelResourceContainer
+	}
+
+	if rc.Identifier == "" {
+		return "", ErrMissingAccountID
+	}
+
+	uri := fmt.Sprintf("/accounts/%s/workers/scripts/%s/content/v2", rc.Identifier, scriptName)
+	res, err := api.makeRequestContextWithHeadersComplete(ctx, http.MethodGet, uri, nil, nil)
+	if err != nil {
+		return "", err
+	}
+
+	return string(res.Body), nil
+}
+
+// UpdateWorkersScriptContent pushes only script content, no metadata.
+//
+// API reference: https://developers.cloudflare.com/api/operations/worker-script-put-content
+func (api *API) UpdateWorkersScriptContent(ctx context.Context, rc *ResourceContainer, params UpdateWorkersScriptContentParams) (WorkerScriptResponse, error) {
+	if rc.Level != AccountRouteLevel {
+		return WorkerScriptResponse{}, ErrRequiredAccountLevelResourceContainer
+	}
+
+	if rc.Identifier == "" {
+		return WorkerScriptResponse{}, ErrMissingAccountID
+	}
+
+	body := []byte(params.Script)
+	var (
+		contentType = "application/javascript"
+		err         error
+	)
+
+	if params.Module {
+		var formattedParams CreateWorkerParams
+		formattedParams.Script = params.Script
+		formattedParams.ScriptName = params.ScriptName
+		formattedParams.Module = params.Module
+		formattedParams.DispatchNamespaceName = params.DispatchNamespaceName
+		contentType, body, err = formatMultipartBody(formattedParams)
+		if err != nil {
+			return WorkerScriptResponse{}, err
+		}
+	}
+
+	uri := fmt.Sprintf("/accounts/%s/workers/scripts/%s/content", rc.Identifier, params.ScriptName)
+	if params.DispatchNamespaceName != nil {
+		uri = fmt.Sprintf("/accounts/%s/workers/dispatch_namespaces/%s/scripts/%s/content", rc.Identifier, *params.DispatchNamespaceName, params.ScriptName)
 	}
 
 	headers := make(http.Header)
@@ -298,6 +419,71 @@ func (api *API) UploadWorker(ctx context.Context, rc *ResourceContainer, params
 	return r, nil
 }
 
+// GetWorkersScriptSettings returns the metadata of a worker.
+//
+// API reference: https://developers.cloudflare.com/api/operations/worker-script-get-settings
+func (api *API) GetWorkersScriptSettings(ctx context.Context, rc *ResourceContainer, scriptName string) (WorkerScriptSettingsResponse, error) {
+	if rc.Level != AccountRouteLevel {
+		return WorkerScriptSettingsResponse{}, ErrRequiredAccountLevelResourceContainer
+	}
+
+	if rc.Identifier == "" {
+		return WorkerScriptSettingsResponse{}, ErrMissingAccountID
+	}
+
+	uri := fmt.Sprintf("/accounts/%s/workers/scripts/%s/settings", rc.Identifier, scriptName)
+	res, err := api.makeRequestContextWithHeaders(ctx, http.MethodGet, uri, nil, nil)
+	var r WorkerScriptSettingsResponse
+	if err != nil {
+		return r, err
+	}
+
+	err = json.Unmarshal(res, &r)
+	if err != nil {
+		return r, fmt.Errorf("%s: %w", errUnmarshalError, err)
+	}
+
+	r.Success = true
+
+	return r, nil
+}
+
+// UpdateWorkersScriptSettings pushes only script metadata.
+//
+// API reference: https://developers.cloudflare.com/api/operations/worker-script-patch-settings
+func (api *API) UpdateWorkersScriptSettings(ctx context.Context, rc *ResourceContainer, params UpdateWorkersScriptSettingsParams) (WorkerScriptSettingsResponse, error) {
+	if rc.Level != AccountRouteLevel {
+		return WorkerScriptSettingsResponse{}, ErrRequiredAccountLevelResourceContainer
+	}
+
+	if rc.Identifier == "" {
+		return WorkerScriptSettingsResponse{}, ErrMissingAccountID
+	}
+
+	body, err := json.Marshal(params)
+	if err != nil {
+		return WorkerScriptSettingsResponse{}, err
+	}
+	headers := make(http.Header)
+	headers.Set("Content-Type", "application/json")
+
+	uri := fmt.Sprintf("/accounts/%s/workers/scripts/%s/settings", rc.Identifier, params.ScriptName)
+	res, err := api.makeRequestContextWithHeaders(ctx, http.MethodPatch, uri, body, headers)
+	var r WorkerScriptSettingsResponse
+	if err != nil {
+		return r, err
+	}
+
+	err = json.Unmarshal(res, &r)
+	if err != nil {
+		return r, fmt.Errorf("%s: %w", errUnmarshalError, err)
+	}
+
+	r.Success = true
+
+	return r, nil
+}
+
 // Returns content-type, body, error.
 func formatMultipartBody(params CreateWorkerParams) (string, []byte, error) {
 	var buf = &bytes.Buffer{}
diff --git a/workers_account_settings.go b/workers_account_settings.go
index 24814806e..8c76b7c4e 100644
--- a/workers_account_settings.go
+++ b/workers_account_settings.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 type WorkersAccountSettings struct {
@@ -32,7 +31,7 @@ type WorkersAccountSettingsResponse struct {
 
 // CreateWorkersAccountSettings sets the account settings for Workers.
 //
-// API reference: https://api.cloudflare.com/#worker-account-settings-create-worker-account-settings
+// API reference: https://developers.cloudflare.com/api/operations/worker-account-settings-create-worker-account-settings
 func (api *API) CreateWorkersAccountSettings(ctx context.Context, rc *ResourceContainer, params CreateWorkersAccountSettingsParameters) (WorkersAccountSettings, error) {
 	if rc.Identifier == "" {
 		return WorkersAccountSettings{}, ErrMissingAccountID
@@ -58,7 +57,7 @@ func (api *API) CreateWorkersAccountSettings(ctx context.Context, rc *ResourceCo
 
 // WorkersAccountSettings returns the current account settings for Workers.
 //
-// API reference: https://api.cloudflare.com/#worker-account-settings-fetch-worker-account-settings
+// API reference: https://developers.cloudflare.com/api/operations/worker-account-settings-fetch-worker-account-settings
 func (api *API) WorkersAccountSettings(ctx context.Context, rc *ResourceContainer, params WorkersAccountSettingsParameters) (WorkersAccountSettings, error) {
 	if rc.Identifier == "" {
 		return WorkersAccountSettings{}, ErrMissingAccountID
diff --git a/workers_bindings.go b/workers_bindings.go
index 05cdc1bdb..f5bcd624a 100644
--- a/workers_bindings.go
+++ b/workers_bindings.go
@@ -4,14 +4,13 @@ import (
 	"context"
 	rand "crypto/rand"
 	"encoding/hex"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"io"
 	"mime/multipart"
 	"net/http"
 	"net/textproto"
-
-	"github.com/goccy/go-json"
 )
 
 // WorkerBindingType represents a particular type of binding.
diff --git a/workers_cron_triggers.go b/workers_cron_triggers.go
index 99d1c2dc6..198ba1980 100644
--- a/workers_cron_triggers.go
+++ b/workers_cron_triggers.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 // WorkerCronTriggerResponse represents the response from the Worker cron trigger
@@ -40,7 +39,7 @@ type UpdateWorkerCronTriggersParams struct {
 // ListWorkerCronTriggers fetches all available cron triggers for a single Worker
 // script.
 //
-// API reference: https://api.cloudflare.com/#worker-cron-trigger-get-cron-triggers
+// API reference: https://developers.cloudflare.com/api/operations/worker-cron-trigger-get-cron-triggers
 func (api *API) ListWorkerCronTriggers(ctx context.Context, rc *ResourceContainer, params ListWorkerCronTriggersParams) ([]WorkerCronTrigger, error) {
 	if rc.Level != AccountRouteLevel {
 		return []WorkerCronTrigger{}, ErrRequiredAccountLevelResourceContainer
@@ -66,7 +65,7 @@ func (api *API) ListWorkerCronTriggers(ctx context.Context, rc *ResourceContaine
 
 // UpdateWorkerCronTriggers updates a single schedule for a Worker cron trigger.
 //
-// API reference: https://api.cloudflare.com/#worker-cron-trigger-update-cron-triggers
+// API reference: https://developers.cloudflare.com/api/operations/worker-cron-trigger-update-cron-triggers
 func (api *API) UpdateWorkerCronTriggers(ctx context.Context, rc *ResourceContainer, params UpdateWorkerCronTriggersParams) ([]WorkerCronTrigger, error) {
 	if rc.Level != AccountRouteLevel {
 		return []WorkerCronTrigger{}, ErrRequiredAccountLevelResourceContainer
diff --git a/workers_domain.go b/workers_domain.go
index 103adb1bc..917ecfaff 100644
--- a/workers_domain.go
+++ b/workers_domain.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 var (
@@ -53,7 +52,7 @@ type WorkersDomainListResponse struct {
 
 // ListWorkersDomains lists all Worker Domains.
 //
-// API reference: https://api.cloudflare.com/#worker-domain-list-domains
+// API reference: https://developers.cloudflare.com/api/operations/worker-domain-list-domains
 func (api *API) ListWorkersDomains(ctx context.Context, rc *ResourceContainer, params ListWorkersDomainParams) ([]WorkersDomain, error) {
 	if rc.Identifier == "" {
 		return []WorkersDomain{}, ErrMissingAccountID
@@ -75,7 +74,7 @@ func (api *API) ListWorkersDomains(ctx context.Context, rc *ResourceContainer, p
 
 // AttachWorkersDomain attaches a worker to a zone and hostname.
 //
-// API reference: https://api.cloudflare.com/#worker-domain-attach-to-domain
+// API reference: https://developers.cloudflare.com/api/operations/worker-domain-attach-to-domain
 func (api *API) AttachWorkersDomain(ctx context.Context, rc *ResourceContainer, domain AttachWorkersDomainParams) (WorkersDomain, error) {
 	if rc.Identifier == "" {
 		return WorkersDomain{}, ErrMissingAccountID
@@ -113,7 +112,7 @@ func (api *API) AttachWorkersDomain(ctx context.Context, rc *ResourceContainer,
 
 // GetWorkersDomain gets a single Worker Domain.
 //
-// API reference: https://api.cloudflare.com/#worker-domain-get-a-domain
+// API reference: https://developers.cloudflare.com/api/operations/worker-domain-get-a-domain
 func (api *API) GetWorkersDomain(ctx context.Context, rc *ResourceContainer, domainID string) (WorkersDomain, error) {
 	if rc.Identifier == "" {
 		return WorkersDomain{}, ErrMissingAccountID
@@ -135,7 +134,7 @@ func (api *API) GetWorkersDomain(ctx context.Context, rc *ResourceContainer, dom
 
 // DetachWorkersDomain detaches a worker from a zone and hostname.
 //
-// API reference: https://api.cloudflare.com/#worker-domain-detach-from-domain
+// API reference: https://developers.cloudflare.com/api/operations/worker-domain-detach-from-domain
 func (api *API) DetachWorkersDomain(ctx context.Context, rc *ResourceContainer, domainID string) error {
 	if rc.Identifier == "" {
 		return ErrMissingAccountID
diff --git a/workers_kv.go b/workers_kv.go
index 7f611bd98..499619ee1 100644
--- a/workers_kv.go
+++ b/workers_kv.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"net/url"
-
-	"github.com/goccy/go-json"
 )
 
 // CreateWorkersKVNamespaceParams provides parameters for creating and updating storage namespaces.
@@ -105,7 +104,7 @@ type ListWorkersKVsParams struct {
 // A 400 is returned if the account already owns a namespace with this title.
 // A namespace must be explicitly deleted to be replaced.
 //
-// API reference: https://api.cloudflare.com/#workers-kv-namespace-create-a-namespace
+// API reference: https://developers.cloudflare.com/api/operations/workers-kv-namespace-create-a-namespace
 func (api *API) CreateWorkersKVNamespace(ctx context.Context, rc *ResourceContainer, params CreateWorkersKVNamespaceParams) (WorkersKVNamespaceResponse, error) {
 	if rc.Level != AccountRouteLevel {
 		return WorkersKVNamespaceResponse{}, ErrRequiredAccountLevelResourceContainer
@@ -130,7 +129,7 @@ func (api *API) CreateWorkersKVNamespace(ctx context.Context, rc *ResourceContai
 
 // ListWorkersKVNamespaces lists storage namespaces.
 //
-// API reference: https://api.cloudflare.com/#workers-kv-namespace-list-namespaces
+// API reference: https://developers.cloudflare.com/api/operations/workers-kv-namespace-list-namespaces
 func (api *API) ListWorkersKVNamespaces(ctx context.Context, rc *ResourceContainer, params ListWorkersKVNamespacesParams) ([]WorkersKVNamespace, *ResultInfo, error) {
 	if rc.Level != AccountRouteLevel {
 		return []WorkersKVNamespace{}, &ResultInfo{}, ErrRequiredAccountLevelResourceContainer
@@ -180,7 +179,7 @@ func (api *API) ListWorkersKVNamespaces(ctx context.Context, rc *ResourceContain
 
 // DeleteWorkersKVNamespace deletes the namespace corresponding to the given ID.
 //
-// API reference: https://api.cloudflare.com/#workers-kv-namespace-remove-a-namespace
+// API reference: https://developers.cloudflare.com/api/operations/workers-kv-namespace-remove-a-namespace
 func (api *API) DeleteWorkersKVNamespace(ctx context.Context, rc *ResourceContainer, namespaceID string) (Response, error) {
 	uri := fmt.Sprintf("/accounts/%s/storage/kv/namespaces/%s", rc.Identifier, namespaceID)
 	res, err := api.makeRequestContext(ctx, http.MethodDelete, uri, nil)
@@ -198,7 +197,7 @@ func (api *API) DeleteWorkersKVNamespace(ctx context.Context, rc *ResourceContai
 
 // UpdateWorkersKVNamespace modifies a KV namespace based on the ID.
 //
-// API reference: https://api.cloudflare.com/#workers-kv-namespace-rename-a-namespace
+// API reference: https://developers.cloudflare.com/api/operations/workers-kv-namespace-rename-a-namespace
 func (api *API) UpdateWorkersKVNamespace(ctx context.Context, rc *ResourceContainer, params UpdateWorkersKVNamespaceParams) (Response, error) {
 	if rc.Level != AccountRouteLevel {
 		return Response{}, ErrRequiredAccountLevelResourceContainer
@@ -224,7 +223,7 @@ func (api *API) UpdateWorkersKVNamespace(ctx context.Context, rc *ResourceContai
 
 // WriteWorkersKVEntry writes a single KV value based on the key.
 //
-// API reference: https://api.cloudflare.com/#workers-kv-namespace-write-key-value-pair
+// API reference: https://developers.cloudflare.com/api/operations/workers-kv-namespace-write-key-value-pair-with-metadata
 func (api *API) WriteWorkersKVEntry(ctx context.Context, rc *ResourceContainer, params WriteWorkersKVEntryParams) (Response, error) {
 	if rc.Level != AccountRouteLevel {
 		return Response{}, ErrRequiredAccountLevelResourceContainer
@@ -252,7 +251,7 @@ func (api *API) WriteWorkersKVEntry(ctx context.Context, rc *ResourceContainer,
 
 // WriteWorkersKVEntries writes multiple KVs at once.
 //
-// API reference: https://api.cloudflare.com/#workers-kv-namespace-write-multiple-key-value-pairs
+// API reference: https://developers.cloudflare.com/api/operations/workers-kv-namespace-write-multiple-key-value-pairs
 func (api *API) WriteWorkersKVEntries(ctx context.Context, rc *ResourceContainer, params WriteWorkersKVEntriesParams) (Response, error) {
 	if rc.Level != AccountRouteLevel {
 		return Response{}, ErrRequiredAccountLevelResourceContainer
@@ -281,7 +280,7 @@ func (api *API) WriteWorkersKVEntries(ctx context.Context, rc *ResourceContainer
 // GetWorkersKV returns the value associated with the given key in the
 // given namespace.
 //
-// API reference: https://api.cloudflare.com/#workers-kv-namespace-read-key-value-pair
+// API reference: https://developers.cloudflare.com/api/operations/workers-kv-namespace-read-key-value-pair
 func (api API) GetWorkersKV(ctx context.Context, rc *ResourceContainer, params GetWorkersKVParams) ([]byte, error) {
 	if rc.Level != AccountRouteLevel {
 		return []byte(``), ErrRequiredAccountLevelResourceContainer
@@ -300,7 +299,7 @@ func (api API) GetWorkersKV(ctx context.Context, rc *ResourceContainer, params G
 
 // DeleteWorkersKVEntry deletes a key and value for a provided storage namespace.
 //
-// API reference: https://api.cloudflare.com/#workers-kv-namespace-delete-key-value-pair
+// API reference: https://developers.cloudflare.com/api/operations/workers-kv-namespace-delete-key-value-pair
 func (api API) DeleteWorkersKVEntry(ctx context.Context, rc *ResourceContainer, params DeleteWorkersKVEntryParams) (Response, error) {
 	if rc.Level != AccountRouteLevel {
 		return Response{}, ErrRequiredAccountLevelResourceContainer
@@ -324,7 +323,7 @@ func (api API) DeleteWorkersKVEntry(ctx context.Context, rc *ResourceContainer,
 
 // DeleteWorkersKVEntries deletes multiple KVs at once.
 //
-// API reference: https://api.cloudflare.com/#workers-kv-namespace-delete-multiple-key-value-pairs
+// API reference: https://developers.cloudflare.com/api/operations/workers-kv-namespace-delete-multiple-key-value-pairs
 func (api *API) DeleteWorkersKVEntries(ctx context.Context, rc *ResourceContainer, params DeleteWorkersKVEntriesParams) (Response, error) {
 	if rc.Level != AccountRouteLevel {
 		return Response{}, ErrRequiredAccountLevelResourceContainer
@@ -351,7 +350,7 @@ func (api *API) DeleteWorkersKVEntries(ctx context.Context, rc *ResourceContaine
 
 // ListWorkersKVKeys lists a namespace's keys.
 //
-// API Reference: https://api.cloudflare.com/#workers-kv-namespace-list-a-namespace-s-keys
+// API Reference: https://developers.cloudflare.com/api/operations/workers-kv-namespace-list-a-namespace'-s-keys
 func (api API) ListWorkersKVKeys(ctx context.Context, rc *ResourceContainer, params ListWorkersKVsParams) (ListStorageKeysResponse, error) {
 	if rc.Level != AccountRouteLevel {
 		return ListStorageKeysResponse{}, ErrRequiredAccountLevelResourceContainer
diff --git a/workers_routes.go b/workers_routes.go
index e6fd4c8e1..f57967c37 100644
--- a/workers_routes.go
+++ b/workers_routes.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 var ErrMissingWorkerRouteID = errors.New("missing required route ID")
@@ -28,7 +27,7 @@ type UpdateWorkerRouteParams struct {
 
 // CreateWorkerRoute creates worker route for a script.
 //
-// API reference: https://api.cloudflare.com/#worker-routes-create-route
+// API reference: https://developers.cloudflare.com/api/operations/worker-routes-create-route
 func (api *API) CreateWorkerRoute(ctx context.Context, rc *ResourceContainer, params CreateWorkerRouteParams) (WorkerRouteResponse, error) {
 	if rc.Level != ZoneRouteLevel {
 		return WorkerRouteResponse{}, fmt.Errorf(errInvalidResourceContainerAccess, ZoneRouteLevel)
@@ -54,7 +53,7 @@ func (api *API) CreateWorkerRoute(ctx context.Context, rc *ResourceContainer, pa
 
 // DeleteWorkerRoute deletes worker route for a script.
 //
-// API reference: https://api.cloudflare.com/#worker-routes-delete-route
+// API reference: https://developers.cloudflare.com/api/operations/worker-routes-delete-route
 func (api *API) DeleteWorkerRoute(ctx context.Context, rc *ResourceContainer, routeID string) (WorkerRouteResponse, error) {
 	if rc.Level != ZoneRouteLevel {
 		return WorkerRouteResponse{}, fmt.Errorf(errInvalidResourceContainerAccess, ZoneRouteLevel)
@@ -83,7 +82,7 @@ func (api *API) DeleteWorkerRoute(ctx context.Context, rc *ResourceContainer, ro
 
 // ListWorkerRoutes returns list of Worker routes.
 //
-// API reference: https://api.cloudflare.com/#worker-routes-list-routes
+// API reference: https://developers.cloudflare.com/api/operations/worker-routes-list-routes
 func (api *API) ListWorkerRoutes(ctx context.Context, rc *ResourceContainer, params ListWorkerRoutesParams) (WorkerRoutesResponse, error) {
 	if rc.Level != ZoneRouteLevel {
 		return WorkerRoutesResponse{}, fmt.Errorf(errInvalidResourceContainerAccess, ZoneRouteLevel)
@@ -109,7 +108,7 @@ func (api *API) ListWorkerRoutes(ctx context.Context, rc *ResourceContainer, par
 
 // GetWorkerRoute returns a Workers route.
 //
-// API reference: https://api.cloudflare.com/#worker-routes-get-route
+// API reference: https://developers.cloudflare.com/api/operations/worker-routes-get-route
 func (api *API) GetWorkerRoute(ctx context.Context, rc *ResourceContainer, routeID string) (WorkerRouteResponse, error) {
 	if rc.Level != ZoneRouteLevel {
 		return WorkerRouteResponse{}, fmt.Errorf(errInvalidResourceContainerAccess, ZoneRouteLevel)
@@ -134,7 +133,7 @@ func (api *API) GetWorkerRoute(ctx context.Context, rc *ResourceContainer, route
 
 // UpdateWorkerRoute updates worker route for a script.
 //
-// API reference: https://api.cloudflare.com/#worker-routes-update-route
+// API reference: https://developers.cloudflare.com/api/operations/worker-routes-update-route
 func (api *API) UpdateWorkerRoute(ctx context.Context, rc *ResourceContainer, params UpdateWorkerRouteParams) (WorkerRouteResponse, error) {
 	if rc.Level != ZoneRouteLevel {
 		return WorkerRouteResponse{}, fmt.Errorf(errInvalidResourceContainerAccess, ZoneRouteLevel)
diff --git a/workers_secrets.go b/workers_secrets.go
index cfcd597fd..458cd1a7c 100644
--- a/workers_secrets.go
+++ b/workers_secrets.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 // WorkersPutSecretRequest provides parameters for creating and updating secrets.
diff --git a/workers_subdomain.go b/workers_subdomain.go
index e2cb2b38a..f4bd5f17c 100644
--- a/workers_subdomain.go
+++ b/workers_subdomain.go
@@ -2,10 +2,9 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
-
-	"github.com/goccy/go-json"
 )
 
 type WorkersSubdomain struct {
@@ -19,7 +18,7 @@ type WorkersSubdomainResponse struct {
 
 // WorkersCreateSubdomain Creates a Workers subdomain for an account.
 //
-// API reference: https://api.cloudflare.com/#worker-subdomain-create-subdomain
+// API reference: https://developers.cloudflare.com/api/operations/worker-subdomain-create-subdomain
 func (api *API) WorkersCreateSubdomain(ctx context.Context, rc *ResourceContainer, params WorkersSubdomain) (WorkersSubdomain, error) {
 	if rc.Identifier == "" {
 		return WorkersSubdomain{}, ErrMissingAccountID
@@ -39,7 +38,7 @@ func (api *API) WorkersCreateSubdomain(ctx context.Context, rc *ResourceContaine
 
 // WorkersGetSubdomain Creates a Workers subdomain for an account.
 //
-// API reference: https://api.cloudflare.com/#worker-subdomain-get-subdomain
+// API reference: https://developers.cloudflare.com/api/operations/worker-subdomain-get-subdomain
 func (api *API) WorkersGetSubdomain(ctx context.Context, rc *ResourceContainer) (WorkersSubdomain, error) {
 	if rc.Identifier == "" {
 		return WorkersSubdomain{}, ErrMissingAccountID
diff --git a/workers_tail.go b/workers_tail.go
index f876c77d4..d44e763d1 100644
--- a/workers_tail.go
+++ b/workers_tail.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 var (
@@ -38,7 +37,7 @@ type ListWorkersTailResponse struct {
 
 // StartWorkersTail Starts a tail that receives logs and exception from a Worker.
 //
-// API reference: https://api.cloudflare.com/#worker-tail-logs-start-tail
+// API reference: https://developers.cloudflare.com/api/operations/worker-tail-logs-start-tail
 func (api *API) StartWorkersTail(ctx context.Context, rc *ResourceContainer, scriptName string) (WorkersTail, error) {
 	if rc.Identifier == "" {
 		return WorkersTail{}, ErrMissingAccountID
@@ -64,7 +63,7 @@ func (api *API) StartWorkersTail(ctx context.Context, rc *ResourceContainer, scr
 
 // ListWorkersTail Get list of tails currently deployed on a Worker.
 //
-// API reference: https://api.cloudflare.com/#worker-tail-logs-list-tails
+// API reference: https://developers.cloudflare.com/api/operations/worker-tail-logs-list-tails
 func (api *API) ListWorkersTail(ctx context.Context, rc *ResourceContainer, params ListWorkersTailParameters) (WorkersTail, error) {
 	if rc.Identifier == "" {
 		return WorkersTail{}, ErrMissingAccountID
@@ -90,7 +89,7 @@ func (api *API) ListWorkersTail(ctx context.Context, rc *ResourceContainer, para
 
 // DeleteWorkersTail Deletes a tail from a Worker.
 //
-// API reference: https://api.cloudflare.com/#worker-tail-logs-delete-tail
+// API reference: https://developers.cloudflare.com/api/operations/worker-tail-logs-delete-tail
 func (api *API) DeleteWorkersTail(ctx context.Context, rc *ResourceContainer, scriptName, tailID string) error {
 	if rc.Identifier == "" {
 		return ErrMissingAccountID
diff --git a/zone.go b/zone.go
index de92880a1..59489f50c 100644
--- a/zone.go
+++ b/zone.go
@@ -2,6 +2,7 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
 	"net/http"
@@ -10,8 +11,6 @@ import (
 	"sync"
 	"time"
 
-	"github.com/goccy/go-json"
-
 	"golang.org/x/net/idna"
 )
 
@@ -672,15 +671,8 @@ func (api *API) PurgeCache(ctx context.Context, zoneID string, pcr PurgeCacheReq
 //
 // API reference: https://api.cloudflare.com/#zone-purge-individual-files-by-url-and-cache-tags
 func (api *API) PurgeCacheContext(ctx context.Context, zoneID string, pcr PurgeCacheRequest) (PurgeCacheResponse, error) {
-	// manually build the payload to ensure we don't escape HTML entities to
-	// match their keys for purging.
-	payload, err := json.MarshalWithOption(pcr, json.DisableHTMLEscape())
-	if err != nil {
-		return PurgeCacheResponse{}, err
-	}
-
 	uri := fmt.Sprintf("/zones/%s/purge_cache", zoneID)
-	res, err := api.makeRequestContext(ctx, http.MethodPost, uri, payload)
+	res, err := api.makeRequestContext(ctx, http.MethodPost, uri, pcr)
 	if err != nil {
 		return PurgeCacheResponse{}, err
 	}
diff --git a/zone_cache_variants.go b/zone_cache_variants.go
index 101f388d5..f7a18d5ca 100644
--- a/zone_cache_variants.go
+++ b/zone_cache_variants.go
@@ -2,11 +2,10 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 type ZoneCacheVariantsValues struct {
diff --git a/zones.go b/zones.go
index 82ddd6c25..f932e2c73 100644
--- a/zones.go
+++ b/zones.go
@@ -2,9 +2,8 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
-
-	"github.com/goccy/go-json"
 )
 
 const defaultZonesPerPage = 100


Test patch:
diff --git a/access_application_test.go b/access_application_test.go
index 0309b6c74..3c07a5443 100644
--- a/access_application_test.go
+++ b/access_application_test.go
@@ -46,8 +46,7 @@ func TestAccessApplications(t *testing.T) {
 					"skip_interstitial": true,
 					"app_launcher_visible": true,
 					"service_auth_401_redirect": true,
-					"path_cookie_attribute": true,
-					"custom_pages": ["480f4f69-1a28-4fdd-9240-1ed29f0ac1dc"]
+					"path_cookie_attribute": true
 				}
 			],
 			"result_info": {
@@ -84,7 +83,6 @@ func TestAccessApplications(t *testing.T) {
 		LogoURL:                 "https://www.example.com/example.png",
 		SkipInterstitial:        BoolPtr(true),
 		PathCookieAttribute:     BoolPtr(true),
-		CustomPages:             []string{"480f4f69-1a28-4fdd-9240-1ed29f0ac1dc"},
 	}}
 
 	mux.HandleFunc("/accounts/"+testAccountID+"/access/apps", handler)
diff --git a/access_audit_log_example_test.go b/access_audit_log_example_test.go
index 1c44de5ab..8c75f7388 100644
--- a/access_audit_log_example_test.go
+++ b/access_audit_log_example_test.go
@@ -2,11 +2,10 @@ package cloudflare_test
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"log"
 
-	"github.com/goccy/go-json"
-
 	cloudflare "github.com/cloudflare/cloudflare-go"
 )
 
diff --git a/access_custom_page_test.go b/access_custom_page_test.go
deleted file mode 100644
index c81f034cd..000000000
--- a/access_custom_page_test.go
+++ /dev/null
@@ -1,196 +0,0 @@
-package cloudflare
-
-import (
-	"context"
-	"fmt"
-	"net/http"
-	"testing"
-
-	"github.com/stretchr/testify/assert"
-)
-
-func TestAccessCustomPages(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, r.Method, http.MethodGet, "HTTP method")
-		w.Header().Set("content-type", "application/json")
-		fmt.Fprintf(w, `{
-			"success": true,
-			"errors": [],
-			"messages": [],
-			"result": [
-				{
-					"name": "Forbidden",
-					"app_count": 0,
-					"type": "forbidden",
-					"uid": "480f4f69-1a28-4fdd-9240-1ed29f0ac1dc"
-				}
-			],
-			"result_info": {
-				"page": 1,
-				"per_page": 20,
-				"count": 1,
-				"total_count": 1
-			}
-		}`)
-	}
-
-	want := []AccessCustomPage{
-		{
-			Name:     "Forbidden",
-			AppCount: 0,
-			Type:     Forbidden,
-			UID:      "480f4f69-1a28-4fdd-9240-1ed29f0ac1dc",
-		},
-	}
-	mux.HandleFunc("/accounts/"+testAccountID+"/access/custom_pages", handler)
-	actual, err := client.ListAccessCustomPages(context.Background(), AccountIdentifier(testAccountID), ListAccessCustomPagesParams{})
-
-	if assert.NoError(t, err) {
-		assert.Equal(t, want, actual)
-	}
-}
-
-func TestAccessCustomPage(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, r.Method, http.MethodGet, "HTTP method")
-		w.Header().Set("Content-Type", "application/json")
-		fmt.Fprintf(w, `{
-			"success": true,
-			"errors": [],
-			"messages": [],
-			"result": {
-				"custom_html": "<html><body><h1>Forbidden</h1></body></html>",
-				"name": "Forbidden",
-				"app_count": 0,
-				"type": "forbidden",
-				"uid": "480f4f69-1a28-4fdd-9240-1ed29f0ac1dc"
-			}
-		}`)
-	}
-
-	want := AccessCustomPage{
-		Name:       "Forbidden",
-		AppCount:   0,
-		Type:       Forbidden,
-		UID:        "480f4f69-1a28-4fdd-9240-1ed29f0ac1dc",
-		CustomHTML: "<html><body><h1>Forbidden</h1></body></html>",
-	}
-	mux.HandleFunc("/accounts/"+testAccountID+"/access/custom_pages/480f4f69-1a28-4fdd-9240-1ed29f0ac1dc", handler)
-	actual, err := client.GetAccessCustomPage(context.Background(), AccountIdentifier(testAccountID), "480f4f69-1a28-4fdd-9240-1ed29f0ac1dc")
-
-	if assert.NoError(t, err) {
-		assert.Equal(t, want, actual)
-	}
-}
-
-func TestCreateAccessCustomPage(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, r.Method, http.MethodPost, "HTTP method")
-		w.Header().Set("Content-Type", "application/json")
-		fmt.Fprintf(w, `{
-			"success": true,
-			"errors": [],
-			"messages": [],
-			"result": {
-				"custom_html": "<html><body><h1>Forbidden</h1></body></html>",
-				"name": "Forbidden",
-				"app_count": 0,
-				"type": "forbidden",
-				"uid": "480f4f69-1a28-4fdd-9240-1ed29f0ac1dc"
-			}
-		}`)
-	}
-
-	customPage := AccessCustomPage{
-		Name:       "Forbidden",
-		AppCount:   0,
-		Type:       Forbidden,
-		UID:        "480f4f69-1a28-4fdd-9240-1ed29f0ac1dc",
-		CustomHTML: "<html><body><h1>Forbidden</h1></body></html>",
-	}
-
-	mux.HandleFunc("/accounts/"+testAccountID+"/access/custom_pages", handler)
-	actual, err := client.CreateAccessCustomPage(context.Background(), AccountIdentifier(testAccountID), CreateAccessCustomPageParams{
-		Name:       "Forbidden",
-		Type:       Forbidden,
-		CustomHTML: "<html><body><h1>Forbidden</h1></body></html>",
-	})
-
-	if assert.NoError(t, err) {
-		assert.Equal(t, customPage, actual)
-	}
-}
-
-func TestUpdateAccessCustomPage(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, r.Method, http.MethodPut, "HTTP method")
-		w.Header().Set("Content-Type", "application/json")
-		fmt.Fprintf(w, `{
-			"success": true,
-			"errors": [],
-			"messages": [],
-			"result": {
-				"custom_html": "<html><body><h1>Forbidden</h1></body></html>",
-				"name": "Forbidden",
-				"app_count": 0,
-				"type": "forbidden",
-				"uid": "480f4f69-1a28-4fdd-9240-1ed29f0ac1dc"
-			}
-		}`)
-	}
-
-	customPage := AccessCustomPage{
-		Name:       "Forbidden",
-		AppCount:   0,
-		Type:       Forbidden,
-		UID:        "480f4f69-1a28-4fdd-9240-1ed29f0ac1dc",
-		CustomHTML: "<html><body><h1>Forbidden</h1></body></html>",
-	}
-
-	mux.HandleFunc("/accounts/"+testAccountID+"/access/custom_pages/480f4f69-1a28-4fdd-9240-1ed29f0ac1dc", handler)
-	actual, err := client.UpdateAccessCustomPage(context.Background(), AccountIdentifier(testAccountID), UpdateAccessCustomPageParams{
-		UID:        "480f4f69-1a28-4fdd-9240-1ed29f0ac1dc",
-		Name:       "Forbidden",
-		Type:       Forbidden,
-		CustomHTML: "<html><body><h1>Forbidden</h1></body></html>",
-	})
-
-	if assert.NoError(t, err) {
-		assert.Equal(t, customPage, actual)
-	}
-}
-
-func TestDeleteAccessCustomPage(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, r.Method, http.MethodDelete, "HTTP method")
-		w.Header().Set("Content-Type", "application/json")
-		fmt.Fprintf(w, `{
-			"success": true,
-			"errors": [],
-			"messages": [],
-			result: {
-				"id": "480f4f69-1a28-4fdd-9240-1ed29f0ac1dc"
-			}
-		}`)
-	}
-
-	mux.HandleFunc("/accounts/"+testAccountID+"/access/custom_pages/480f4f69-1a28-4fdd-9240-1ed29f0ac1dc", handler)
-	err := client.DeleteAccessCustomPage(context.Background(), AccountIdentifier(testAccountID), "480f4f69-1a28-4fdd-9240-1ed29f0ac1dc")
-
-	assert.NoError(t, err)
-}
diff --git a/access_keys_test.go b/access_keys_test.go
index 789bca638..6502c6862 100644
--- a/access_keys_test.go
+++ b/access_keys_test.go
@@ -2,12 +2,12 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"testing"
 	"time"
 
-	"github.com/goccy/go-json"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/cloudflare_test.go b/cloudflare_test.go
index 315f743cb..03654047c 100644
--- a/cloudflare_test.go
+++ b/cloudflare_test.go
@@ -2,13 +2,13 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"net/http/httptest"
 	"testing"
 	"time"
 
-	"github.com/goccy/go-json"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/device_posture_rule_test.go b/device_posture_rule_test.go
index e70db3529..83d76083d 100644
--- a/device_posture_rule_test.go
+++ b/device_posture_rule_test.go
@@ -240,7 +240,7 @@ func TestDevicePostureIntegrationDelete(t *testing.T) {
 			"success": true,
 			"errors": [],
 			"messages": [],
-			"result": null
+			"result": null 
 		}`)
 	}
 
diff --git a/diagnostics_test.go b/diagnostics_test.go
index 0662c006b..d27ebd8a0 100644
--- a/diagnostics_test.go
+++ b/diagnostics_test.go
@@ -2,12 +2,11 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"testing"
 
-	"github.com/goccy/go-json"
-
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/dlp_payload_log_test.go b/dlp_payload_log_test.go
index 6cb86b54a..4ef505da4 100644
--- a/dlp_payload_log_test.go
+++ b/dlp_payload_log_test.go
@@ -2,13 +2,12 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"testing"
 	"time"
 
-	"github.com/goccy/go-json"
-
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 )
diff --git a/dlp_profile_test.go b/dlp_profile_test.go
index 376a7b0cd..20b4aa86c 100644
--- a/dlp_profile_test.go
+++ b/dlp_profile_test.go
@@ -2,13 +2,12 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"testing"
 	"time"
 
-	"github.com/goccy/go-json"
-
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 )
diff --git a/dns_test.go b/dns_test.go
index 2f991f56f..3145a764c 100644
--- a/dns_test.go
+++ b/dns_test.go
@@ -2,12 +2,12 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"testing"
 	"time"
 
-	"github.com/goccy/go-json"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 )
diff --git a/duration_test.go b/duration_test.go
index c18695588..4b0abd8a5 100644
--- a/duration_test.go
+++ b/duration_test.go
@@ -1,10 +1,9 @@
 package cloudflare
 
 import (
+	"encoding/json"
 	"fmt"
 	"time"
-
-	"github.com/goccy/go-json"
 )
 
 func ExampleDuration() {
diff --git a/firewall_test.go b/firewall_test.go
index b8a1bcb82..2daf55699 100644
--- a/firewall_test.go
+++ b/firewall_test.go
@@ -2,13 +2,12 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"testing"
 	"time"
 
-	"github.com/goccy/go-json"
-
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 )
diff --git a/images_test.go b/images_test.go
index a8f089cd9..43cd8ad34 100644
--- a/images_test.go
+++ b/images_test.go
@@ -3,6 +3,7 @@ package cloudflare
 import (
 	"bytes"
 	"context"
+	"encoding/json"
 	"fmt"
 	"io"
 	"net/http"
@@ -10,8 +11,6 @@ import (
 	"testing"
 	"time"
 
-	"github.com/goccy/go-json"
-
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 )
diff --git a/keyless_test.go b/keyless_test.go
index 4b90601da..c358a9437 100644
--- a/keyless_test.go
+++ b/keyless_test.go
@@ -2,12 +2,12 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"testing"
 	"time"
 
-	"github.com/goccy/go-json"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 )
diff --git a/load_balancing_test.go b/load_balancing_test.go
index 2bed0cab9..cef7d1b5d 100644
--- a/load_balancing_test.go
+++ b/load_balancing_test.go
@@ -115,7 +115,7 @@ func TestCreateLoadBalancerPool(t *testing.T) {
 		Description:    "Primary data center - Provider XYZ",
 		Name:           "primary-dc-1",
 		Enabled:        true,
-		MinimumOrigins: IntPtr(1),
+		MinimumOrigins: 1,
 		Monitor:        "f1aba936b94213e5b8dca0c0dbf1f9cc",
 		Latitude:       fptr(55),
 		Longitude:      fptr(-12.5),
@@ -183,71 +183,6 @@ func TestCreateLoadBalancerPool(t *testing.T) {
 	}
 }
 
-func TestCreateLoadBalancerPool_MinimumOriginsZero(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, http.MethodPost, r.Method, "Expected method 'POST', got %s", r.Method)
-		w.Header().Set("content-type", "application/json")
-		b, err := io.ReadAll(r.Body)
-		defer r.Body.Close()
-		if assert.NoError(t, err) {
-			assert.JSONEq(t, `{
-              "description": "Primary data center - Provider XYZ",
-              "name": "primary-dc-2",
-              "minimum_origins": 0,
-              "enabled": true,
-              "check_regions": null,
-              "origins": null
-            }`, string(b))
-		}
-		fmt.Fprint(w, `{
-            "success": true,
-            "errors": [],
-            "messages": [],
-            "result": {
-              "description": "Primary data center - Provider XYZ",
-              "created_on": "2014-01-01T05:20:00.12345Z",
-              "modified_on": "2014-02-01T05:20:00.12345Z",
-              "id": "f6fea70e5154b4c563bd549ef405b7d7",
-              "enabled": true,
-              "minimum_origins": 0,
-              "name": "primary-dc-2",
-              "notification_email": "",
-              "check_regions": null,
-              "origins": []
-            }
-        }`)
-	}
-
-	mux.HandleFunc("/accounts/"+testAccountID+"/load_balancers/pools", handler)
-	createdOn, _ := time.Parse(time.RFC3339, "2014-01-01T05:20:00.12345Z")
-	modifiedOn, _ := time.Parse(time.RFC3339, "2014-02-01T05:20:00.12345Z")
-	want := LoadBalancerPool{
-		ID:                "f6fea70e5154b4c563bd549ef405b7d7",
-		CreatedOn:         &createdOn,
-		ModifiedOn:        &modifiedOn,
-		Description:       "Primary data center - Provider XYZ",
-		Name:              "primary-dc-2",
-		Enabled:           true,
-		MinimumOrigins:    IntPtr(0),
-		Origins:           []LoadBalancerOrigin{},
-		NotificationEmail: "",
-	}
-	request := LoadBalancerPool{
-		Description:    "Primary data center - Provider XYZ",
-		Name:           "primary-dc-2",
-		Enabled:        true,
-		MinimumOrigins: IntPtr(0),
-	}
-
-	actual, err := client.CreateLoadBalancerPool(context.Background(), AccountIdentifier(testAccountID), CreateLoadBalancerPoolParams{LoadBalancerPool: request})
-	if assert.NoError(t, err) {
-		assert.Equal(t, want, actual)
-	}
-}
-
 func TestCreateLoadBalancerPool_ZoneIsNotSupported(t *testing.T) {
 	setup()
 	defer teardown()
diff --git a/lockdown_test.go b/lockdown_test.go
index 93ee813f0..cd4b7c050 100644
--- a/lockdown_test.go
+++ b/lockdown_test.go
@@ -2,13 +2,12 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"testing"
 	"time"
 
-	"github.com/goccy/go-json"
-
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 )
diff --git a/logpush_example_test.go b/logpush_example_test.go
index 3714ce74c..f45b3281a 100644
--- a/logpush_example_test.go
+++ b/logpush_example_test.go
@@ -2,11 +2,10 @@ package cloudflare_test
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"log"
 
-	"github.com/goccy/go-json"
-
 	cloudflare "github.com/cloudflare/cloudflare-go"
 )
 
diff --git a/logpush_test.go b/logpush_test.go
index 72d97578e..4585b9a40 100644
--- a/logpush_test.go
+++ b/logpush_test.go
@@ -2,6 +2,7 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"io"
 	"log"
@@ -9,8 +10,6 @@ import (
 	"strconv"
 	"testing"
 
-	"github.com/goccy/go-json"
-
 	"time"
 
 	"github.com/stretchr/testify/assert"
diff --git a/notifications_test.go b/notifications_test.go
index 1b857d016..1cc151428 100644
--- a/notifications_test.go
+++ b/notifications_test.go
@@ -2,13 +2,12 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"testing"
 	"time"
 
-	"github.com/goccy/go-json"
-
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 )
diff --git a/origin_ca_test.go b/origin_ca_test.go
index eca1ac28b..855472b9c 100644
--- a/origin_ca_test.go
+++ b/origin_ca_test.go
@@ -2,13 +2,13 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"encoding/pem"
 	"fmt"
 	"net/http"
 	"testing"
 	"time"
 
-	"github.com/goccy/go-json"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/page_rules_test.go b/page_rules_test.go
index fd7a1fd45..fd87fa8a7 100644
--- a/page_rules_test.go
+++ b/page_rules_test.go
@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"net/http"
 	"testing"
+
 	"time"
 
 	"github.com/stretchr/testify/assert"
diff --git a/pages_deployment_test.go b/pages_deployment_test.go
index 7e7f3ee0e..48ec89abb 100644
--- a/pages_deployment_test.go
+++ b/pages_deployment_test.go
@@ -305,7 +305,7 @@ func TestListPagesDeploymentsPagination(t *testing.T) {
 			fmt.Fprintf(w, `{
 				"success": true,
 				"errors": [],
-				"messages": [],
+				"messages": [],	
 				"result": [
 					%s
 				],
@@ -321,7 +321,7 @@ func TestListPagesDeploymentsPagination(t *testing.T) {
 			fmt.Fprintf(w, `{
 				"success": true,
 				"errors": [],
-				"messages": [],
+				"messages": [],	
 				"result": [
 					%s
 				],
diff --git a/waiting_room_test.go b/waiting_room_test.go
index 4d5ccf00e..df7e0da6b 100644
--- a/waiting_room_test.go
+++ b/waiting_room_test.go
@@ -40,9 +40,8 @@ var waitingRoomJSON = fmt.Sprintf(`
       "default_template_language": "en-US",
       "next_event_prequeue_start_time": null,
       "next_event_start_time": "%s",
-	  "cookie_suffix": "example_shop",
-	  "additional_routes": [{"host": "shop2.example.com", "path": "/shop/checkout"}],
-	  "queueing_status_code": 200
+			"cookie_suffix": "example_shop",
+			"additional_routes": [{"host": "shop2.example.com", "path": "/shop/checkout"}]
     }
    `, waitingRoomID, testTimestampWaitingRoom.Format(time.RFC3339Nano), testTimestampWaitingRoom.Format(time.RFC3339Nano),
 	testTimestampWaitingRoomEventStart.Format(time.RFC3339Nano))
@@ -128,7 +127,6 @@ var waitingRoom = WaitingRoom{
 	NextEventPrequeueStartTime: nil,
 	CookieSuffix:               "example_shop",
 	AdditionalRoutes:           []*WaitingRoomRoute{{Host: "shop2.example.com", Path: "/shop/checkout"}},
-	QueueingStatusCode:         200,
 }
 
 var waitingRoomEvent = WaitingRoomEvent{
diff --git a/workers_bindings_test.go b/workers_bindings_test.go
index 3b33f0623..b7514449b 100644
--- a/workers_bindings_test.go
+++ b/workers_bindings_test.go
@@ -3,13 +3,12 @@ package cloudflare
 import (
 	"bytes"
 	"context"
+	"encoding/json"
 	"fmt"
 	"io"
 	"net/http"
 	"testing"
 
-	"github.com/goccy/go-json"
-
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/workers_test.go b/workers_test.go
index 1a95019c5..613f7c145 100644
--- a/workers_test.go
+++ b/workers_test.go
@@ -2,6 +2,7 @@ package cloudflare
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"io"
 	"mime/multipart"
@@ -10,8 +11,6 @@ import (
 	"testing"
 	"time"
 
-	"github.com/goccy/go-json"
-
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 )
@@ -165,6 +164,11 @@ const (
   "errors": [],
   "messages": []
 }`
+	workerMetadata = `{
+		"id": "e7a57d8746e74ae49c25994dadb421b1",
+		"etag": "279cf40d86d70b82f6cd3ba90a646b3ad995912da446836d7371c21c6a43977a",
+		"logpush": true
+	}`
 	workerScript = `addEventListener('fetch', event => {
   event.passThroughOnException()
   event.respondWith(handleRequest(event.request))
@@ -491,6 +495,97 @@ func TestGetWorker_Module(t *testing.T) {
 	}
 }
 
+func TestGetWorkersScriptContent(t *testing.T) {
+	setup()
+	defer teardown()
+
+	mux.HandleFunc("/accounts/"+testAccountID+"/workers/scripts/foo/content/v2", func(w http.ResponseWriter, r *http.Request) {
+		assert.Equal(t, http.MethodGet, r.Method, "Expected method 'GET', got %s", r.Method)
+		w.Header().Set("content-type", "application/javascript")
+		fmt.Fprint(w, workerScript)
+	})
+
+	res, err := client.GetWorkersScriptContent(context.Background(), AccountIdentifier(testAccountID), "foo")
+	want := workerScript
+	if assert.NoError(t, err) {
+		assert.Equal(t, want, res)
+	}
+}
+
+func TestUpdateWorkersScriptContent(t *testing.T) {
+	setup()
+	defer teardown()
+
+	formattedTime, _ := time.Parse(time.RFC3339Nano, "2018-06-09T15:17:01.989141Z")
+	mux.HandleFunc("/accounts/"+testAccountID+"/workers/scripts/foo/content", func(w http.ResponseWriter, r *http.Request) {
+		assert.Equal(t, http.MethodPut, r.Method, "Expected method 'PUT', got %s", r.Method)
+		contentTypeHeader := r.Header.Get("content-type")
+		assert.Equal(t, "application/javascript", contentTypeHeader, "Expected content-type request header to be 'application/javascript', got %s", contentTypeHeader)
+		w.Header().Set("content-type", "application/json")
+		fmt.Fprint(w, workersScriptResponse(t, withWorkerModifiedOn(formattedTime)))
+	})
+
+	res, err := client.UpdateWorkersScriptContent(context.Background(), AccountIdentifier(testAccountID), UpdateWorkersScriptContentParams{ScriptName: "foo", Script: workerScript})
+	want := WorkerScriptResponse{
+		successResponse,
+		false,
+		WorkerScript{
+			Script: workerScript,
+		},
+	}
+	if assert.NoError(t, err) {
+		assert.Equal(t, want.Script, res.Script)
+	}
+}
+
+func TestGetWorkersScriptSettings(t *testing.T) {
+	setup()
+	defer teardown()
+
+	mux.HandleFunc("/accounts/"+testAccountID+"/workers/scripts/foo/settings", func(w http.ResponseWriter, r *http.Request) {
+		assert.Equal(t, http.MethodGet, r.Method, "Expected method 'GET', got %s", r.Method)
+		w.Header().Set("content-type", "application/javascript")
+		fmt.Fprint(w, workerMetadata)
+	})
+
+	res, err := client.GetWorkersScriptSettings(context.Background(), AccountIdentifier(testAccountID), "foo")
+	logpush := true
+	want := WorkerScriptSettingsResponse{
+		successResponse,
+		WorkerMetaData{
+			ID:      "e7a57d8746e74ae49c25994dadb421b1",
+			ETAG:    "279cf40d86d70b82f6cd3ba90a646b3ad995912da446836d7371c21c6a43977a",
+			Logpush: &logpush,
+		}}
+	if assert.NoError(t, err) {
+		assert.Equal(t, want.WorkerMetaData, res.WorkerMetaData)
+	}
+}
+
+func TestUpdateWorkersScriptSettings(t *testing.T) {
+	setup()
+	defer teardown()
+
+	mux.HandleFunc("/accounts/"+testAccountID+"/workers/scripts/foo/settings", func(w http.ResponseWriter, r *http.Request) {
+		assert.Equal(t, http.MethodPatch, r.Method, "Expected method 'PATCH', got %s", r.Method)
+		w.Header().Set("content-type", "application/javascript")
+		fmt.Fprint(w, workerMetadata)
+	})
+
+	res, err := client.UpdateWorkersScriptSettings(context.Background(), AccountIdentifier(testAccountID), UpdateWorkersScriptSettingsParams{ScriptName: "foo"})
+	logpush := true
+	want := WorkerScriptSettingsResponse{
+		successResponse,
+		WorkerMetaData{
+			ID:      "e7a57d8746e74ae49c25994dadb421b1",
+			ETAG:    "279cf40d86d70b82f6cd3ba90a646b3ad995912da446836d7371c21c6a43977a",
+			Logpush: &logpush,
+		}}
+	if assert.NoError(t, err) {
+		assert.Equal(t, want.WorkerMetaData, res.WorkerMetaData)
+	}
+}
+
 func TestListWorkers(t *testing.T) {
 	setup()
 	defer teardown()
@@ -1218,7 +1313,7 @@ func TestUploadWorker_ToDispatchNamespace(t *testing.T) {
 		fmt.Fprint(w, workersScriptResponse(t))
 	}
 	mux.HandleFunc(
-		fmt.Sprintf("/accounts/"+testAccountID+"/workers/dispatch/namespaces/%s/scripts/bar", namespaceName),
+		fmt.Sprintf("/accounts/"+testAccountID+"/workers/namespaces/%s/scripts/bar", namespaceName),
 		handler,
 	)
 
diff --git a/zone_test.go b/zone_test.go
index d8b94cd1c..6dd5bc4fc 100644
--- a/zone_test.go
+++ b/zone_test.go
@@ -4,6 +4,7 @@ import (
 	"context"
 	"crypto/md5"   //nolint:gosec
 	"encoding/hex" // for generating IDs
+	"encoding/json"
 	"fmt"
 	"net/http"
 	"net/url"
@@ -11,7 +12,6 @@ import (
 	"testing"
 	"time"
 
-	"github.com/goccy/go-json"
 	"github.com/stretchr/testify/assert"
 )