Repository: cloudflare/cloudflare-go
Pull request #3474 (2024-10-22 18:27:50)

feat(api): api update


Patch:
diff --git a/.stats.yml b/.stats.yml
index f9170ebd3..46432ee06 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,2 +1,2 @@
 configured_endpoints: 1355
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/cloudflare%2Fcloudflare-1f51355f6e5b710597316ba40d0f3e0f37d65448cf201340a7ec1410d23e12cc.yml
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/cloudflare%2Fcloudflare-5ed9e6196bb4e7657df0aa4128b60e516c9435d2c8e9dd065507417b11fe5935.yml
diff --git a/api.md b/api.md
index d48919f88..442086bab 100644
--- a/api.md
+++ b/api.md
@@ -945,22 +945,38 @@ Params Types:
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#NAPTRRecordParam">NAPTRRecordParam</a>
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#NSRecordParam">NSRecordParam</a>
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#PTRRecordParam">PTRRecordParam</a>
-- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#RecordParam">RecordParam</a>
-- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#RecordTagsParam">RecordTagsParam</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#RecordUnionParam">RecordUnionParam</a>
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#SMIMEARecordParam">SMIMEARecordParam</a>
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#SRVRecordParam">SRVRecordParam</a>
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#SSHFPRecordParam">SSHFPRecordParam</a>
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#SVCBRecordParam">SVCBRecordParam</a>
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#TLSARecordParam">TLSARecordParam</a>
-- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#TTL">TTL</a>
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#TXTRecordParam">TXTRecordParam</a>
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#URIRecordParam">URIRecordParam</a>
 
 Response Types:
 
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#ARecord">ARecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#AAAARecord">AAAARecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#CAARecord">CAARecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#CERTRecord">CERTRecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#CNAMERecord">CNAMERecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#DNSKEYRecord">DNSKEYRecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#DSRecord">DSRecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#HTTPSRecord">HTTPSRecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#LOCRecord">LOCRecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#MXRecord">MXRecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#NAPTRRecord">NAPTRRecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#NSRecord">NSRecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#PTRRecord">PTRRecord</a>
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#RecordProcessTiming">RecordProcessTiming</a>
-- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#RecordTags">RecordTags</a>
-- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#TTL">TTL</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#SMIMEARecord">SMIMEARecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#SRVRecord">SRVRecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#SSHFPRecord">SSHFPRecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#SVCBRecord">SVCBRecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#TLSARecord">TLSARecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#TXTRecord">TXTRecord</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#URIRecord">URIRecord</a>
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#RecordNewResponse">RecordNewResponse</a>
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#RecordUpdateResponse">RecordUpdateResponse</a>
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns">dns</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/dns#RecordListResponse">RecordListResponse</a>
@@ -2793,7 +2809,7 @@ Response Types:
 
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppNewResponse">AppNewResponse</a>
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppUpdateResponse">AppUpdateResponse</a>
-- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppListResponseUnion">AppListResponseUnion</a>
+- <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppListResponse">AppListResponse</a>
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppDeleteResponse">AppDeleteResponse</a>
 - <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppGetResponse">AppGetResponse</a>
 
@@ -2801,7 +2817,7 @@ Methods:
 
 - <code title="post /zones/{zone_id}/spectrum/apps">client.Spectrum.Apps.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppService.New">New</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, params <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppNewParams">AppNewParams</a>) (<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppNewResponse">AppNewResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
 - <code title="put /zones/{zone_id}/spectrum/apps/{app_id}">client.Spectrum.Apps.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppService.Update">Update</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, appID <a href="https://pkg.go.dev/builtin#string">string</a>, params <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppUpdateParams">AppUpdateParams</a>) (<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppUpdateResponse">AppUpdateResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
-- <code title="get /zones/{zone_id}/spectrum/apps">client.Spectrum.Apps.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppService.List">List</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, params <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppListParams">AppListParams</a>) (<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppListResponseUnion">AppListResponseUnion</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
+- <code title="get /zones/{zone_id}/spectrum/apps">client.Spectrum.Apps.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppService.List">List</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, params <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppListParams">AppListParams</a>) (<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/packages/pagination">pagination</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/packages/pagination#V4PagePaginationArray">V4PagePaginationArray</a>[<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppListResponse">AppListResponse</a>], <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
 - <code title="delete /zones/{zone_id}/spectrum/apps/{app_id}">client.Spectrum.Apps.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppService.Delete">Delete</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, appID <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppDeleteParams">AppDeleteParams</a>) (<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppDeleteResponse">AppDeleteResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
 - <code title="get /zones/{zone_id}/spectrum/apps/{app_id}">client.Spectrum.Apps.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppService.Get">Get</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, appID <a href="https://pkg.go.dev/builtin#string">string</a>, query <a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppGetParams">AppGetParams</a>) (<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum">spectrum</a>.<a href="https://pkg.go.dev/github.com/cloudflare/cloudflare-go/v3/spectrum#AppGetResponse">AppGetResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
 
diff --git a/dns/record.go b/dns/record.go
index 0af5e25b6..57a09019e 100644
--- a/dns/record.go
+++ b/dns/record.go
@@ -10,6 +10,7 @@ import (
 	"mime/multipart"
 	"net/http"
 	"net/url"
+	"reflect"
 	"time"
 
 	"github.com/cloudflare/cloudflare-go/v3/internal/apiform"
@@ -20,6 +21,7 @@ import (
 	"github.com/cloudflare/cloudflare-go/v3/option"
 	"github.com/cloudflare/cloudflare-go/v3/packages/pagination"
 	"github.com/cloudflare/cloudflare-go/v3/shared"
+	"github.com/tidwall/gjson"
 )
 
 // RecordService contains methods and other services that help with interacting
@@ -288,6 +290,63 @@ func (r *RecordService) Scan(ctx context.Context, params RecordScanParams, opts
 	return
 }
 
+type ARecord struct {
+	// A valid IPv4 address.
+	Content string `json:"content" format:"ipv4"`
+	// Record type.
+	Type ARecordType `json:"type"`
+	JSON aRecordJSON `json:"-"`
+}
+
+// aRecordJSON contains the JSON metadata for the struct [ARecord]
+type aRecordJSON struct {
+	Content     apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *ARecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r aRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r ARecord) implementsDNSRecordNewResponse() {}
+
+func (r ARecord) implementsDNSRecordUpdateResponse() {}
+
+func (r ARecord) implementsDNSRecordListResponse() {}
+
+func (r ARecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r ARecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r ARecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r ARecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r ARecord) implementsDNSRecordEditResponse() {}
+
+func (r ARecord) implementsDNSRecordGetResponse() {}
+
+// Record type.
+type ARecordType string
+
+const (
+	ARecordTypeA ARecordType = "A"
+)
+
+func (r ARecordType) IsKnown() bool {
+	switch r {
+	case ARecordTypeA:
+		return true
+	}
+	return false
+}
+
 type ARecordParam struct {
 	// A valid IPv4 address.
 	Content param.Field[string] `json:"content" format:"ipv4"`
@@ -301,16 +360,58 @@ func (r ARecordParam) MarshalJSON() (data []byte, err error) {
 
 func (r ARecordParam) implementsDNSRecordUnionParam() {}
 
+type AAAARecord struct {
+	// A valid IPv6 address.
+	Content string `json:"content" format:"ipv6"`
+	// Record type.
+	Type AAAARecordType `json:"type"`
+	JSON aaaaRecordJSON `json:"-"`
+}
+
+// aaaaRecordJSON contains the JSON metadata for the struct [AAAARecord]
+type aaaaRecordJSON struct {
+	Content     apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *AAAARecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r aaaaRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r AAAARecord) implementsDNSRecordNewResponse() {}
+
+func (r AAAARecord) implementsDNSRecordUpdateResponse() {}
+
+func (r AAAARecord) implementsDNSRecordListResponse() {}
+
+func (r AAAARecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r AAAARecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r AAAARecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r AAAARecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r AAAARecord) implementsDNSRecordEditResponse() {}
+
+func (r AAAARecord) implementsDNSRecordGetResponse() {}
+
 // Record type.
-type ARecordType string
+type AAAARecordType string
 
 const (
-	ARecordTypeA ARecordType = "A"
+	AAAARecordTypeAAAA AAAARecordType = "AAAA"
 )
 
-func (r ARecordType) IsKnown() bool {
+func (r AAAARecordType) IsKnown() bool {
 	switch r {
-	case ARecordTypeA:
+	case AAAARecordTypeAAAA:
 		return true
 	}
 	return false
@@ -329,16 +430,89 @@ func (r AAAARecordParam) MarshalJSON() (data []byte, err error) {
 
 func (r AAAARecordParam) implementsDNSRecordUnionParam() {}
 
+type CAARecord struct {
+	// Formatted CAA content. See 'data' to set CAA properties.
+	Content string `json:"content"`
+	// Components of a CAA record.
+	Data CAARecordData `json:"data"`
+	// Record type.
+	Type CAARecordType `json:"type"`
+	JSON caaRecordJSON `json:"-"`
+}
+
+// caaRecordJSON contains the JSON metadata for the struct [CAARecord]
+type caaRecordJSON struct {
+	Content     apijson.Field
+	Data        apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *CAARecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r caaRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r CAARecord) implementsDNSRecordNewResponse() {}
+
+func (r CAARecord) implementsDNSRecordUpdateResponse() {}
+
+func (r CAARecord) implementsDNSRecordListResponse() {}
+
+func (r CAARecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r CAARecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r CAARecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r CAARecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r CAARecord) implementsDNSRecordEditResponse() {}
+
+func (r CAARecord) implementsDNSRecordGetResponse() {}
+
+// Components of a CAA record.
+type CAARecordData struct {
+	// Flags for the CAA record.
+	Flags float64 `json:"flags"`
+	// Name of the property controlled by this record (e.g.: issue, issuewild, iodef).
+	Tag string `json:"tag"`
+	// Value of the record. This field's semantics depend on the chosen tag.
+	Value string            `json:"value"`
+	JSON  caaRecordDataJSON `json:"-"`
+}
+
+// caaRecordDataJSON contains the JSON metadata for the struct [CAARecordData]
+type caaRecordDataJSON struct {
+	Flags       apijson.Field
+	Tag         apijson.Field
+	Value       apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *CAARecordData) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r caaRecordDataJSON) RawJSON() string {
+	return r.raw
+}
+
 // Record type.
-type AAAARecordType string
+type CAARecordType string
 
 const (
-	AAAARecordTypeAAAA AAAARecordType = "AAAA"
+	CAARecordTypeCAA CAARecordType = "CAA"
 )
 
-func (r AAAARecordType) IsKnown() bool {
+func (r CAARecordType) IsKnown() bool {
 	switch r {
-	case AAAARecordTypeAAAA:
+	case CAARecordTypeCAA:
 		return true
 	}
 	return false
@@ -371,16 +545,92 @@ func (r CAARecordDataParam) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
+type CERTRecord struct {
+	// Formatted CERT content. See 'data' to set CERT properties.
+	Content string `json:"content"`
+	// Components of a CERT record.
+	Data CERTRecordData `json:"data"`
+	// Record type.
+	Type CERTRecordType `json:"type"`
+	JSON certRecordJSON `json:"-"`
+}
+
+// certRecordJSON contains the JSON metadata for the struct [CERTRecord]
+type certRecordJSON struct {
+	Content     apijson.Field
+	Data        apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *CERTRecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r certRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r CERTRecord) implementsDNSRecordNewResponse() {}
+
+func (r CERTRecord) implementsDNSRecordUpdateResponse() {}
+
+func (r CERTRecord) implementsDNSRecordListResponse() {}
+
+func (r CERTRecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r CERTRecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r CERTRecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r CERTRecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r CERTRecord) implementsDNSRecordEditResponse() {}
+
+func (r CERTRecord) implementsDNSRecordGetResponse() {}
+
+// Components of a CERT record.
+type CERTRecordData struct {
+	// Algorithm.
+	Algorithm float64 `json:"algorithm"`
+	// Certificate.
+	Certificate string `json:"certificate"`
+	// Key Tag.
+	KeyTag float64 `json:"key_tag"`
+	// Type.
+	Type float64            `json:"type"`
+	JSON certRecordDataJSON `json:"-"`
+}
+
+// certRecordDataJSON contains the JSON metadata for the struct [CERTRecordData]
+type certRecordDataJSON struct {
+	Algorithm   apijson.Field
+	Certificate apijson.Field
+	KeyTag      apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *CERTRecordData) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r certRecordDataJSON) RawJSON() string {
+	return r.raw
+}
+
 // Record type.
-type CAARecordType string
+type CERTRecordType string
 
 const (
-	CAARecordTypeCAA CAARecordType = "CAA"
+	CERTRecordTypeCERT CERTRecordType = "CERT"
 )
 
-func (r CAARecordType) IsKnown() bool {
+func (r CERTRecordType) IsKnown() bool {
 	switch r {
-	case CAARecordTypeCAA:
+	case CERTRecordTypeCERT:
 		return true
 	}
 	return false
@@ -415,16 +665,85 @@ func (r CERTRecordDataParam) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
+type CNAMERecord struct {
+	// A valid hostname. Must not match the record's name.
+	Content  string              `json:"content"`
+	Settings CNAMERecordSettings `json:"settings"`
+	// Record type.
+	Type CNAMERecordType `json:"type"`
+	JSON cnameRecordJSON `json:"-"`
+}
+
+// cnameRecordJSON contains the JSON metadata for the struct [CNAMERecord]
+type cnameRecordJSON struct {
+	Content     apijson.Field
+	Settings    apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *CNAMERecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r cnameRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r CNAMERecord) implementsDNSRecordNewResponse() {}
+
+func (r CNAMERecord) implementsDNSRecordUpdateResponse() {}
+
+func (r CNAMERecord) implementsDNSRecordListResponse() {}
+
+func (r CNAMERecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r CNAMERecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r CNAMERecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r CNAMERecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r CNAMERecord) implementsDNSRecordEditResponse() {}
+
+func (r CNAMERecord) implementsDNSRecordGetResponse() {}
+
+type CNAMERecordSettings struct {
+	// If enabled, causes the CNAME record to be resolved externally and the resulting
+	// address records (e.g., A and AAAA) to be returned instead of the CNAME record
+	// itself. This setting has no effect on proxied records, which are always
+	// flattened.
+	FlattenCNAME bool                    `json:"flatten_cname"`
+	JSON         cnameRecordSettingsJSON `json:"-"`
+}
+
+// cnameRecordSettingsJSON contains the JSON metadata for the struct
+// [CNAMERecordSettings]
+type cnameRecordSettingsJSON struct {
+	FlattenCNAME apijson.Field
+	raw          string
+	ExtraFields  map[string]apijson.Field
+}
+
+func (r *CNAMERecordSettings) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r cnameRecordSettingsJSON) RawJSON() string {
+	return r.raw
+}
+
 // Record type.
-type CERTRecordType string
+type CNAMERecordType string
 
 const (
-	CERTRecordTypeCERT CERTRecordType = "CERT"
+	CNAMERecordTypeCNAME CNAMERecordType = "CNAME"
 )
 
-func (r CERTRecordType) IsKnown() bool {
+func (r CNAMERecordType) IsKnown() bool {
 	switch r {
-	case CERTRecordTypeCERT:
+	case CNAMERecordTypeCNAME:
 		return true
 	}
 	return false
@@ -456,53 +775,86 @@ func (r CNAMERecordSettingsParam) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
-// Record type.
-type CNAMERecordType string
-
-const (
-	CNAMERecordTypeCNAME CNAMERecordType = "CNAME"
-)
+type DNSKEYRecord struct {
+	// Formatted DNSKEY content. See 'data' to set DNSKEY properties.
+	Content string `json:"content"`
+	// Components of a DNSKEY record.
+	Data DNSKEYRecordData `json:"data"`
+	// Record type.
+	Type DNSKEYRecordType `json:"type"`
+	JSON dnskeyRecordJSON `json:"-"`
+}
 
-func (r CNAMERecordType) IsKnown() bool {
-	switch r {
-	case CNAMERecordTypeCNAME:
-		return true
-	}
-	return false
+// dnskeyRecordJSON contains the JSON metadata for the struct [DNSKEYRecord]
+type dnskeyRecordJSON struct {
+	Content     apijson.Field
+	Data        apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
 }
 
-type DNSKEYRecordParam struct {
-	// Components of a DNSKEY record.
-	Data param.Field[DNSKEYRecordDataParam] `json:"data"`
-	// Record type.
-	Type param.Field[DNSKEYRecordType] `json:"type"`
+func (r *DNSKEYRecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
 }
 
-func (r DNSKEYRecordParam) MarshalJSON() (data []byte, err error) {
-	return apijson.MarshalRoot(r)
+func (r dnskeyRecordJSON) RawJSON() string {
+	return r.raw
 }
 
-func (r DNSKEYRecordParam) implementsDNSRecordUnionParam() {}
+func (r DNSKEYRecord) implementsDNSRecordNewResponse() {}
+
+func (r DNSKEYRecord) implementsDNSRecordUpdateResponse() {}
+
+func (r DNSKEYRecord) implementsDNSRecordListResponse() {}
+
+func (r DNSKEYRecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r DNSKEYRecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r DNSKEYRecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r DNSKEYRecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r DNSKEYRecord) implementsDNSRecordEditResponse() {}
+
+func (r DNSKEYRecord) implementsDNSRecordGetResponse() {}
 
 // Components of a DNSKEY record.
-type DNSKEYRecordDataParam struct {
+type DNSKEYRecordData struct {
 	// Algorithm.
-	Algorithm param.Field[float64] `json:"algorithm"`
+	Algorithm float64 `json:"algorithm"`
 	// Flags.
-	Flags param.Field[float64] `json:"flags"`
+	Flags float64 `json:"flags"`
 	// Protocol.
-	Protocol param.Field[float64] `json:"protocol"`
+	Protocol float64 `json:"protocol"`
 	// Public Key.
-	PublicKey param.Field[string] `json:"public_key"`
+	PublicKey string               `json:"public_key"`
+	JSON      dnskeyRecordDataJSON `json:"-"`
 }
 
-func (r DNSKEYRecordDataParam) MarshalJSON() (data []byte, err error) {
-	return apijson.MarshalRoot(r)
+// dnskeyRecordDataJSON contains the JSON metadata for the struct
+// [DNSKEYRecordData]
+type dnskeyRecordDataJSON struct {
+	Algorithm   apijson.Field
+	Flags       apijson.Field
+	Protocol    apijson.Field
+	PublicKey   apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
 }
 
-// Record type.
-type DNSKEYRecordType string
-
+func (r *DNSKEYRecordData) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r dnskeyRecordDataJSON) RawJSON() string {
+	return r.raw
+}
+
+// Record type.
+type DNSKEYRecordType string
+
 const (
 	DNSKEYRecordTypeDNSKEY DNSKEYRecordType = "DNSKEY"
 )
@@ -515,6 +867,126 @@ func (r DNSKEYRecordType) IsKnown() bool {
 	return false
 }
 
+type DNSKEYRecordParam struct {
+	// Components of a DNSKEY record.
+	Data param.Field[DNSKEYRecordDataParam] `json:"data"`
+	// Record type.
+	Type param.Field[DNSKEYRecordType] `json:"type"`
+}
+
+func (r DNSKEYRecordParam) MarshalJSON() (data []byte, err error) {
+	return apijson.MarshalRoot(r)
+}
+
+func (r DNSKEYRecordParam) implementsDNSRecordUnionParam() {}
+
+// Components of a DNSKEY record.
+type DNSKEYRecordDataParam struct {
+	// Algorithm.
+	Algorithm param.Field[float64] `json:"algorithm"`
+	// Flags.
+	Flags param.Field[float64] `json:"flags"`
+	// Protocol.
+	Protocol param.Field[float64] `json:"protocol"`
+	// Public Key.
+	PublicKey param.Field[string] `json:"public_key"`
+}
+
+func (r DNSKEYRecordDataParam) MarshalJSON() (data []byte, err error) {
+	return apijson.MarshalRoot(r)
+}
+
+type DSRecord struct {
+	// Formatted DS content. See 'data' to set DS properties.
+	Content string `json:"content"`
+	// Components of a DS record.
+	Data DSRecordData `json:"data"`
+	// Record type.
+	Type DSRecordType `json:"type"`
+	JSON dsRecordJSON `json:"-"`
+}
+
+// dsRecordJSON contains the JSON metadata for the struct [DSRecord]
+type dsRecordJSON struct {
+	Content     apijson.Field
+	Data        apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *DSRecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r dsRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r DSRecord) implementsDNSRecordNewResponse() {}
+
+func (r DSRecord) implementsDNSRecordUpdateResponse() {}
+
+func (r DSRecord) implementsDNSRecordListResponse() {}
+
+func (r DSRecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r DSRecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r DSRecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r DSRecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r DSRecord) implementsDNSRecordEditResponse() {}
+
+func (r DSRecord) implementsDNSRecordGetResponse() {}
+
+// Components of a DS record.
+type DSRecordData struct {
+	// Algorithm.
+	Algorithm float64 `json:"algorithm"`
+	// Digest.
+	Digest string `json:"digest"`
+	// Digest Type.
+	DigestType float64 `json:"digest_type"`
+	// Key Tag.
+	KeyTag float64          `json:"key_tag"`
+	JSON   dsRecordDataJSON `json:"-"`
+}
+
+// dsRecordDataJSON contains the JSON metadata for the struct [DSRecordData]
+type dsRecordDataJSON struct {
+	Algorithm   apijson.Field
+	Digest      apijson.Field
+	DigestType  apijson.Field
+	KeyTag      apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *DSRecordData) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r dsRecordDataJSON) RawJSON() string {
+	return r.raw
+}
+
+// Record type.
+type DSRecordType string
+
+const (
+	DSRecordTypeDS DSRecordType = "DS"
+)
+
+func (r DSRecordType) IsKnown() bool {
+	switch r {
+	case DSRecordTypeDS:
+		return true
+	}
+	return false
+}
+
 type DSRecordParam struct {
 	// Components of a DS record.
 	Data param.Field[DSRecordDataParam] `json:"data"`
@@ -544,16 +1016,89 @@ func (r DSRecordDataParam) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
+type HTTPSRecord struct {
+	// Formatted HTTPS content. See 'data' to set HTTPS properties.
+	Content string `json:"content"`
+	// Components of a HTTPS record.
+	Data HTTPSRecordData `json:"data"`
+	// Record type.
+	Type HTTPSRecordType `json:"type"`
+	JSON httpsRecordJSON `json:"-"`
+}
+
+// httpsRecordJSON contains the JSON metadata for the struct [HTTPSRecord]
+type httpsRecordJSON struct {
+	Content     apijson.Field
+	Data        apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *HTTPSRecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r httpsRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r HTTPSRecord) implementsDNSRecordNewResponse() {}
+
+func (r HTTPSRecord) implementsDNSRecordUpdateResponse() {}
+
+func (r HTTPSRecord) implementsDNSRecordListResponse() {}
+
+func (r HTTPSRecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r HTTPSRecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r HTTPSRecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r HTTPSRecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r HTTPSRecord) implementsDNSRecordEditResponse() {}
+
+func (r HTTPSRecord) implementsDNSRecordGetResponse() {}
+
+// Components of a HTTPS record.
+type HTTPSRecordData struct {
+	// priority.
+	Priority float64 `json:"priority"`
+	// target.
+	Target string `json:"target"`
+	// value.
+	Value string              `json:"value"`
+	JSON  httpsRecordDataJSON `json:"-"`
+}
+
+// httpsRecordDataJSON contains the JSON metadata for the struct [HTTPSRecordData]
+type httpsRecordDataJSON struct {
+	Priority    apijson.Field
+	Target      apijson.Field
+	Value       apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *HTTPSRecordData) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r httpsRecordDataJSON) RawJSON() string {
+	return r.raw
+}
+
 // Record type.
-type DSRecordType string
+type HTTPSRecordType string
 
 const (
-	DSRecordTypeDS DSRecordType = "DS"
+	HTTPSRecordTypeHTTPS HTTPSRecordType = "HTTPS"
 )
 
-func (r DSRecordType) IsKnown() bool {
+func (r HTTPSRecordType) IsKnown() bool {
 	switch r {
-	case DSRecordTypeDS:
+	case HTTPSRecordTypeHTTPS:
 		return true
 	}
 	return false
@@ -586,64 +1131,104 @@ func (r HTTPSRecordDataParam) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
-// Record type.
-type HTTPSRecordType string
-
-const (
-	HTTPSRecordTypeHTTPS HTTPSRecordType = "HTTPS"
-)
+type LOCRecord struct {
+	// Formatted LOC content. See 'data' to set LOC properties.
+	Content string `json:"content"`
+	// Components of a LOC record.
+	Data LOCRecordData `json:"data"`
+	// Record type.
+	Type LOCRecordType `json:"type"`
+	JSON locRecordJSON `json:"-"`
+}
 
-func (r HTTPSRecordType) IsKnown() bool {
-	switch r {
-	case HTTPSRecordTypeHTTPS:
-		return true
-	}
-	return false
+// locRecordJSON contains the JSON metadata for the struct [LOCRecord]
+type locRecordJSON struct {
+	Content     apijson.Field
+	Data        apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
 }
 
-type LOCRecordParam struct {
-	// Components of a LOC record.
-	Data param.Field[LOCRecordDataParam] `json:"data"`
-	// Record type.
-	Type param.Field[LOCRecordType] `json:"type"`
+func (r *LOCRecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
 }
 
-func (r LOCRecordParam) MarshalJSON() (data []byte, err error) {
-	return apijson.MarshalRoot(r)
+func (r locRecordJSON) RawJSON() string {
+	return r.raw
 }
 
-func (r LOCRecordParam) implementsDNSRecordUnionParam() {}
+func (r LOCRecord) implementsDNSRecordNewResponse() {}
+
+func (r LOCRecord) implementsDNSRecordUpdateResponse() {}
+
+func (r LOCRecord) implementsDNSRecordListResponse() {}
+
+func (r LOCRecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r LOCRecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r LOCRecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r LOCRecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r LOCRecord) implementsDNSRecordEditResponse() {}
+
+func (r LOCRecord) implementsDNSRecordGetResponse() {}
 
 // Components of a LOC record.
-type LOCRecordDataParam struct {
+type LOCRecordData struct {
 	// Altitude of location in meters.
-	Altitude param.Field[float64] `json:"altitude"`
+	Altitude float64 `json:"altitude"`
 	// Degrees of latitude.
-	LatDegrees param.Field[float64] `json:"lat_degrees"`
+	LatDegrees float64 `json:"lat_degrees"`
 	// Latitude direction.
-	LatDirection param.Field[LOCRecordDataLatDirection] `json:"lat_direction"`
+	LatDirection LOCRecordDataLatDirection `json:"lat_direction"`
 	// Minutes of latitude.
-	LatMinutes param.Field[float64] `json:"lat_minutes"`
+	LatMinutes float64 `json:"lat_minutes"`
 	// Seconds of latitude.
-	LatSeconds param.Field[float64] `json:"lat_seconds"`
+	LatSeconds float64 `json:"lat_seconds"`
 	// Degrees of longitude.
-	LongDegrees param.Field[float64] `json:"long_degrees"`
+	LongDegrees float64 `json:"long_degrees"`
 	// Longitude direction.
-	LongDirection param.Field[LOCRecordDataLongDirection] `json:"long_direction"`
+	LongDirection LOCRecordDataLongDirection `json:"long_direction"`
 	// Minutes of longitude.
-	LongMinutes param.Field[float64] `json:"long_minutes"`
+	LongMinutes float64 `json:"long_minutes"`
 	// Seconds of longitude.
-	LongSeconds param.Field[float64] `json:"long_seconds"`
+	LongSeconds float64 `json:"long_seconds"`
 	// Horizontal precision of location.
-	PrecisionHorz param.Field[float64] `json:"precision_horz"`
+	PrecisionHorz float64 `json:"precision_horz"`
 	// Vertical precision of location.
-	PrecisionVert param.Field[float64] `json:"precision_vert"`
+	PrecisionVert float64 `json:"precision_vert"`
 	// Size of location in meters.
-	Size param.Field[float64] `json:"size"`
+	Size float64           `json:"size"`
+	JSON locRecordDataJSON `json:"-"`
+}
+
+// locRecordDataJSON contains the JSON metadata for the struct [LOCRecordData]
+type locRecordDataJSON struct {
+	Altitude      apijson.Field
+	LatDegrees    apijson.Field
+	LatDirection  apijson.Field
+	LatMinutes    apijson.Field
+	LatSeconds    apijson.Field
+	LongDegrees   apijson.Field
+	LongDirection apijson.Field
+	LongMinutes   apijson.Field
+	LongSeconds   apijson.Field
+	PrecisionHorz apijson.Field
+	PrecisionVert apijson.Field
+	Size          apijson.Field
+	raw           string
+	ExtraFields   map[string]apijson.Field
+}
+
+func (r *LOCRecordData) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
 }
 
-func (r LOCRecordDataParam) MarshalJSON() (data []byte, err error) {
-	return apijson.MarshalRoot(r)
+func (r locRecordDataJSON) RawJSON() string {
+	return r.raw
 }
 
 // Latitude direction.
@@ -693,45 +1278,233 @@ func (r LOCRecordType) IsKnown() bool {
 	return false
 }
 
-type MXRecordParam struct {
-	// A valid mail server hostname.
-	Content param.Field[string] `json:"content" format:"hostname"`
-	// Required for MX, SRV and URI records; unused by other record types. Records with
-	// lower priorities are preferred.
-	Priority param.Field[float64] `json:"priority"`
+type LOCRecordParam struct {
+	// Components of a LOC record.
+	Data param.Field[LOCRecordDataParam] `json:"data"`
 	// Record type.
-	Type param.Field[MXRecordType] `json:"type"`
+	Type param.Field[LOCRecordType] `json:"type"`
 }
 
-func (r MXRecordParam) MarshalJSON() (data []byte, err error) {
+func (r LOCRecordParam) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
-func (r MXRecordParam) implementsDNSRecordUnionParam() {}
-
-// Record type.
-type MXRecordType string
+func (r LOCRecordParam) implementsDNSRecordUnionParam() {}
 
-const (
-	MXRecordTypeMX MXRecordType = "MX"
-)
+// Components of a LOC record.
+type LOCRecordDataParam struct {
+	// Altitude of location in meters.
+	Altitude param.Field[float64] `json:"altitude"`
+	// Degrees of latitude.
+	LatDegrees param.Field[float64] `json:"lat_degrees"`
+	// Latitude direction.
+	LatDirection param.Field[LOCRecordDataLatDirection] `json:"lat_direction"`
+	// Minutes of latitude.
+	LatMinutes param.Field[float64] `json:"lat_minutes"`
+	// Seconds of latitude.
+	LatSeconds param.Field[float64] `json:"lat_seconds"`
+	// Degrees of longitude.
+	LongDegrees param.Field[float64] `json:"long_degrees"`
+	// Longitude direction.
+	LongDirection param.Field[LOCRecordDataLongDirection] `json:"long_direction"`
+	// Minutes of longitude.
+	LongMinutes param.Field[float64] `json:"long_minutes"`
+	// Seconds of longitude.
+	LongSeconds param.Field[float64] `json:"long_seconds"`
+	// Horizontal precision of location.
+	PrecisionHorz param.Field[float64] `json:"precision_horz"`
+	// Vertical precision of location.
+	PrecisionVert param.Field[float64] `json:"precision_vert"`
+	// Size of location in meters.
+	Size param.Field[float64] `json:"size"`
+}
 
-func (r MXRecordType) IsKnown() bool {
-	switch r {
-	case MXRecordTypeMX:
-		return true
-	}
-	return false
+func (r LOCRecordDataParam) MarshalJSON() (data []byte, err error) {
+	return apijson.MarshalRoot(r)
 }
 
-type NAPTRRecordParam struct {
-	// Components of a NAPTR record.
-	Data param.Field[NAPTRRecordDataParam] `json:"data"`
+type MXRecord struct {
+	// A valid mail server hostname.
+	Content string `json:"content" format:"hostname"`
+	// Required for MX, SRV and URI records; unused by other record types. Records with
+	// lower priorities are preferred.
+	Priority float64 `json:"priority"`
 	// Record type.
-	Type param.Field[NAPTRRecordType] `json:"type"`
+	Type MXRecordType `json:"type"`
+	JSON mxRecordJSON `json:"-"`
 }
 
-func (r NAPTRRecordParam) MarshalJSON() (data []byte, err error) {
+// mxRecordJSON contains the JSON metadata for the struct [MXRecord]
+type mxRecordJSON struct {
+	Content     apijson.Field
+	Priority    apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *MXRecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r mxRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r MXRecord) implementsDNSRecordNewResponse() {}
+
+func (r MXRecord) implementsDNSRecordUpdateResponse() {}
+
+func (r MXRecord) implementsDNSRecordListResponse() {}
+
+func (r MXRecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r MXRecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r MXRecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r MXRecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r MXRecord) implementsDNSRecordEditResponse() {}
+
+func (r MXRecord) implementsDNSRecordGetResponse() {}
+
+// Record type.
+type MXRecordType string
+
+const (
+	MXRecordTypeMX MXRecordType = "MX"
+)
+
+func (r MXRecordType) IsKnown() bool {
+	switch r {
+	case MXRecordTypeMX:
+		return true
+	}
+	return false
+}
+
+type MXRecordParam struct {
+	// A valid mail server hostname.
+	Content param.Field[string] `json:"content" format:"hostname"`
+	// Required for MX, SRV and URI records; unused by other record types. Records with
+	// lower priorities are preferred.
+	Priority param.Field[float64] `json:"priority"`
+	// Record type.
+	Type param.Field[MXRecordType] `json:"type"`
+}
+
+func (r MXRecordParam) MarshalJSON() (data []byte, err error) {
+	return apijson.MarshalRoot(r)
+}
+
+func (r MXRecordParam) implementsDNSRecordUnionParam() {}
+
+type NAPTRRecord struct {
+	// Formatted NAPTR content. See 'data' to set NAPTR properties.
+	Content string `json:"content"`
+	// Components of a NAPTR record.
+	Data NAPTRRecordData `json:"data"`
+	// Record type.
+	Type NAPTRRecordType `json:"type"`
+	JSON naptrRecordJSON `json:"-"`
+}
+
+// naptrRecordJSON contains the JSON metadata for the struct [NAPTRRecord]
+type naptrRecordJSON struct {
+	Content     apijson.Field
+	Data        apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *NAPTRRecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r naptrRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r NAPTRRecord) implementsDNSRecordNewResponse() {}
+
+func (r NAPTRRecord) implementsDNSRecordUpdateResponse() {}
+
+func (r NAPTRRecord) implementsDNSRecordListResponse() {}
+
+func (r NAPTRRecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r NAPTRRecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r NAPTRRecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r NAPTRRecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r NAPTRRecord) implementsDNSRecordEditResponse() {}
+
+func (r NAPTRRecord) implementsDNSRecordGetResponse() {}
+
+// Components of a NAPTR record.
+type NAPTRRecordData struct {
+	// Flags.
+	Flags string `json:"flags"`
+	// Order.
+	Order float64 `json:"order"`
+	// Preference.
+	Preference float64 `json:"preference"`
+	// Regex.
+	Regex string `json:"regex"`
+	// Replacement.
+	Replacement string `json:"replacement"`
+	// Service.
+	Service string              `json:"service"`
+	JSON    naptrRecordDataJSON `json:"-"`
+}
+
+// naptrRecordDataJSON contains the JSON metadata for the struct [NAPTRRecordData]
+type naptrRecordDataJSON struct {
+	Flags       apijson.Field
+	Order       apijson.Field
+	Preference  apijson.Field
+	Regex       apijson.Field
+	Replacement apijson.Field
+	Service     apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *NAPTRRecordData) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r naptrRecordDataJSON) RawJSON() string {
+	return r.raw
+}
+
+// Record type.
+type NAPTRRecordType string
+
+const (
+	NAPTRRecordTypeNAPTR NAPTRRecordType = "NAPTR"
+)
+
+func (r NAPTRRecordType) IsKnown() bool {
+	switch r {
+	case NAPTRRecordTypeNAPTR:
+		return true
+	}
+	return false
+}
+
+type NAPTRRecordParam struct {
+	// Components of a NAPTR record.
+	Data param.Field[NAPTRRecordDataParam] `json:"data"`
+	// Record type.
+	Type param.Field[NAPTRRecordType] `json:"type"`
+}
+
+func (r NAPTRRecordParam) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
@@ -757,16 +1530,58 @@ func (r NAPTRRecordDataParam) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
+type NSRecord struct {
+	// A valid name server host name.
+	Content string `json:"content"`
+	// Record type.
+	Type NSRecordType `json:"type"`
+	JSON nsRecordJSON `json:"-"`
+}
+
+// nsRecordJSON contains the JSON metadata for the struct [NSRecord]
+type nsRecordJSON struct {
+	Content     apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *NSRecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r nsRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r NSRecord) implementsDNSRecordNewResponse() {}
+
+func (r NSRecord) implementsDNSRecordUpdateResponse() {}
+
+func (r NSRecord) implementsDNSRecordListResponse() {}
+
+func (r NSRecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r NSRecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r NSRecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r NSRecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r NSRecord) implementsDNSRecordEditResponse() {}
+
+func (r NSRecord) implementsDNSRecordGetResponse() {}
+
 // Record type.
-type NAPTRRecordType string
+type NSRecordType string
 
 const (
-	NAPTRRecordTypeNAPTR NAPTRRecordType = "NAPTR"
+	NSRecordTypeNS NSRecordType = "NS"
 )
 
-func (r NAPTRRecordType) IsKnown() bool {
+func (r NSRecordType) IsKnown() bool {
 	switch r {
-	case NAPTRRecordTypeNAPTR:
+	case NSRecordTypeNS:
 		return true
 	}
 	return false
@@ -785,16 +1600,58 @@ func (r NSRecordParam) MarshalJSON() (data []byte, err error) {
 
 func (r NSRecordParam) implementsDNSRecordUnionParam() {}
 
+type PTRRecord struct {
+	// Domain name pointing to the address.
+	Content string `json:"content"`
+	// Record type.
+	Type PTRRecordType `json:"type"`
+	JSON ptrRecordJSON `json:"-"`
+}
+
+// ptrRecordJSON contains the JSON metadata for the struct [PTRRecord]
+type ptrRecordJSON struct {
+	Content     apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *PTRRecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r ptrRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r PTRRecord) implementsDNSRecordNewResponse() {}
+
+func (r PTRRecord) implementsDNSRecordUpdateResponse() {}
+
+func (r PTRRecord) implementsDNSRecordListResponse() {}
+
+func (r PTRRecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r PTRRecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r PTRRecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r PTRRecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r PTRRecord) implementsDNSRecordEditResponse() {}
+
+func (r PTRRecord) implementsDNSRecordGetResponse() {}
+
 // Record type.
-type NSRecordType string
+type PTRRecordType string
 
 const (
-	NSRecordTypeNS NSRecordType = "NS"
+	PTRRecordTypePTR PTRRecordType = "PTR"
 )
 
-func (r NSRecordType) IsKnown() bool {
+func (r PTRRecordType) IsKnown() bool {
 	switch r {
-	case NSRecordTypeNS:
+	case PTRRecordTypePTR:
 		return true
 	}
 	return false
@@ -813,42 +1670,97 @@ func (r PTRRecordParam) MarshalJSON() (data []byte, err error) {
 
 func (r PTRRecordParam) implementsDNSRecordUnionParam() {}
 
+type RecordParam struct {
+	// A valid IPv4 address.
+	Content param.Field[string] `json:"content" format:"ipv4"`
+	// Record type.
+	Type     param.Field[RecordType]  `json:"type"`
+	Data     param.Field[interface{}] `json:"data,required"`
+	Settings param.Field[interface{}] `json:"settings,required"`
+	// Required for MX, SRV and URI records; unused by other record types. Records with
+	// lower priorities are preferred.
+	Priority param.Field[float64] `json:"priority"`
+}
+
+func (r RecordParam) MarshalJSON() (data []byte, err error) {
+	return apijson.MarshalRoot(r)
+}
+
+func (r RecordParam) implementsDNSRecordUnionParam() {}
+
+// Satisfied by [dns.ARecordParam], [dns.AAAARecordParam], [dns.CAARecordParam],
+// [dns.CERTRecordParam], [dns.CNAMERecordParam], [dns.DNSKEYRecordParam],
+// [dns.DSRecordParam], [dns.HTTPSRecordParam], [dns.LOCRecordParam],
+// [dns.MXRecordParam], [dns.NAPTRRecordParam], [dns.NSRecordParam],
+// [dns.RecordOpenpgpkeyParam], [dns.PTRRecordParam], [dns.SMIMEARecordParam],
+// [dns.SRVRecordParam], [dns.SSHFPRecordParam], [dns.SVCBRecordParam],
+// [dns.TLSARecordParam], [dns.TXTRecordParam], [dns.URIRecordParam],
+// [RecordParam].
+type RecordUnionParam interface {
+	implementsDNSRecordUnionParam()
+}
+
+type RecordOpenpgpkeyParam struct {
+	// A single Base64-encoded OpenPGP Transferable Public Key (RFC 4880 Section 11.1)
+	Content param.Field[string] `json:"content"`
+	// Record type.
+	Type param.Field[RecordOpenpgpkeyType] `json:"type"`
+}
+
+func (r RecordOpenpgpkeyParam) MarshalJSON() (data []byte, err error) {
+	return apijson.MarshalRoot(r)
+}
+
+func (r RecordOpenpgpkeyParam) implementsDNSRecordUnionParam() {}
+
 // Record type.
-type PTRRecordType string
+type RecordOpenpgpkeyType string
 
 const (
-	PTRRecordTypePTR PTRRecordType = "PTR"
+	RecordOpenpgpkeyTypeOpenpgpkey RecordOpenpgpkeyType = "OPENPGPKEY"
 )
 
-func (r PTRRecordType) IsKnown() bool {
+func (r RecordOpenpgpkeyType) IsKnown() bool {
 	switch r {
-	case PTRRecordTypePTR:
+	case RecordOpenpgpkeyTypeOpenpgpkey:
 		return true
 	}
 	return false
 }
 
-type RecordParam struct {
-	// Comments or notes about the DNS record. This field has no effect on DNS
-	// responses.
-	Comment param.Field[string] `json:"comment"`
-	// DNS record name (or @ for the zone apex) in Punycode.
-	Name param.Field[string] `json:"name"`
-	// Whether the record is receiving the performance and security benefits of
-	// Cloudflare.
-	Proxied param.Field[bool] `json:"proxied"`
-	// Settings for the DNS record.
-	Settings param.Field[interface{}] `json:"settings"`
-	// Custom tags for the DNS record. This field has no effect on DNS responses.
-	Tags param.Field[[]RecordTagsParam] `json:"tags"`
-	// Time To Live (TTL) of the DNS record in seconds. Setting to 1 means 'automatic'.
-	// Value must be between 60 and 86400, with the minimum reduced to 30 for
-	// Enterprise zones.
-	TTL param.Field[TTL] `json:"ttl"`
-}
+// Record type.
+type RecordType string
 
-func (r RecordParam) MarshalJSON() (data []byte, err error) {
-	return apijson.MarshalRoot(r)
+const (
+	RecordTypeA          RecordType = "A"
+	RecordTypeAAAA       RecordType = "AAAA"
+	RecordTypeCAA        RecordType = "CAA"
+	RecordTypeCERT       RecordType = "CERT"
+	RecordTypeCNAME      RecordType = "CNAME"
+	RecordTypeDNSKEY     RecordType = "DNSKEY"
+	RecordTypeDS         RecordType = "DS"
+	RecordTypeHTTPS      RecordType = "HTTPS"
+	RecordTypeLOC        RecordType = "LOC"
+	RecordTypeMX         RecordType = "MX"
+	RecordTypeNAPTR      RecordType = "NAPTR"
+	RecordTypeNS         RecordType = "NS"
+	RecordTypeOpenpgpkey RecordType = "OPENPGPKEY"
+	RecordTypePTR        RecordType = "PTR"
+	RecordTypeSMIMEA     RecordType = "SMIMEA"
+	RecordTypeSRV        RecordType = "SRV"
+	RecordTypeSSHFP      RecordType = "SSHFP"
+	RecordTypeSVCB       RecordType = "SVCB"
+	RecordTypeTLSA       RecordType = "TLSA"
+	RecordTypeTXT        RecordType = "TXT"
+	RecordTypeURI        RecordType = "URI"
+)
+
+func (r RecordType) IsKnown() bool {
+	switch r {
+	case RecordTypeA, RecordTypeAAAA, RecordTypeCAA, RecordTypeCERT, RecordTypeCNAME, RecordTypeDNSKEY, RecordTypeDS, RecordTypeHTTPS, RecordTypeLOC, RecordTypeMX, RecordTypeNAPTR, RecordTypeNS, RecordTypeOpenpgpkey, RecordTypePTR, RecordTypeSMIMEA, RecordTypeSRV, RecordTypeSSHFP, RecordTypeSVCB, RecordTypeTLSA, RecordTypeTXT, RecordTypeURI:
+		return true
+	}
+	return false
 }
 
 type RecordProcessTiming struct {
@@ -879,37 +1791,81 @@ func (r recordProcessTimingJSON) RawJSON() string {
 	return r.raw
 }
 
-type RecordTags = string
-
-type RecordTagsParam = string
-
-type SMIMEARecordParam struct {
+type SMIMEARecord struct {
+	// Formatted SMIMEA content. See 'data' to set SMIMEA properties.
+	Content string `json:"content"`
 	// Components of a SMIMEA record.
-	Data param.Field[SMIMEARecordDataParam] `json:"data"`
+	Data SMIMEARecordData `json:"data"`
 	// Record type.
-	Type param.Field[SMIMEARecordType] `json:"type"`
+	Type SMIMEARecordType `json:"type"`
+	JSON smimeaRecordJSON `json:"-"`
 }
 
-func (r SMIMEARecordParam) MarshalJSON() (data []byte, err error) {
-	return apijson.MarshalRoot(r)
+// smimeaRecordJSON contains the JSON metadata for the struct [SMIMEARecord]
+type smimeaRecordJSON struct {
+	Content     apijson.Field
+	Data        apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
 }
 
-func (r SMIMEARecordParam) implementsDNSRecordUnionParam() {}
+func (r *SMIMEARecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r smimeaRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r SMIMEARecord) implementsDNSRecordNewResponse() {}
+
+func (r SMIMEARecord) implementsDNSRecordUpdateResponse() {}
+
+func (r SMIMEARecord) implementsDNSRecordListResponse() {}
+
+func (r SMIMEARecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r SMIMEARecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r SMIMEARecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r SMIMEARecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r SMIMEARecord) implementsDNSRecordEditResponse() {}
+
+func (r SMIMEARecord) implementsDNSRecordGetResponse() {}
 
 // Components of a SMIMEA record.
-type SMIMEARecordDataParam struct {
+type SMIMEARecordData struct {
 	// Certificate.
-	Certificate param.Field[string] `json:"certificate"`
+	Certificate string `json:"certificate"`
 	// Matching Type.
-	MatchingType param.Field[float64] `json:"matching_type"`
+	MatchingType float64 `json:"matching_type"`
 	// Selector.
-	Selector param.Field[float64] `json:"selector"`
+	Selector float64 `json:"selector"`
 	// Usage.
-	Usage param.Field[float64] `json:"usage"`
+	Usage float64              `json:"usage"`
+	JSON  smimeaRecordDataJSON `json:"-"`
 }
 
-func (r SMIMEARecordDataParam) MarshalJSON() (data []byte, err error) {
-	return apijson.MarshalRoot(r)
+// smimeaRecordDataJSON contains the JSON metadata for the struct
+// [SMIMEARecordData]
+type smimeaRecordDataJSON struct {
+	Certificate  apijson.Field
+	MatchingType apijson.Field
+	Selector     apijson.Field
+	Usage        apijson.Field
+	raw          string
+	ExtraFields  map[string]apijson.Field
+}
+
+func (r *SMIMEARecordData) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r smimeaRecordDataJSON) RawJSON() string {
+	return r.raw
 }
 
 // Record type.
@@ -927,8 +1883,130 @@ func (r SMIMEARecordType) IsKnown() bool {
 	return false
 }
 
-type SRVRecordParam struct {
-	// Components of a SRV record.
+type SMIMEARecordParam struct {
+	// Components of a SMIMEA record.
+	Data param.Field[SMIMEARecordDataParam] `json:"data"`
+	// Record type.
+	Type param.Field[SMIMEARecordType] `json:"type"`
+}
+
+func (r SMIMEARecordParam) MarshalJSON() (data []byte, err error) {
+	return apijson.MarshalRoot(r)
+}
+
+func (r SMIMEARecordParam) implementsDNSRecordUnionParam() {}
+
+// Components of a SMIMEA record.
+type SMIMEARecordDataParam struct {
+	// Certificate.
+	Certificate param.Field[string] `json:"certificate"`
+	// Matching Type.
+	MatchingType param.Field[float64] `json:"matching_type"`
+	// Selector.
+	Selector param.Field[float64] `json:"selector"`
+	// Usage.
+	Usage param.Field[float64] `json:"usage"`
+}
+
+func (r SMIMEARecordDataParam) MarshalJSON() (data []byte, err error) {
+	return apijson.MarshalRoot(r)
+}
+
+type SRVRecord struct {
+	// Priority, weight, port, and SRV target. See 'data' for setting the individual
+	// component values.
+	Content string `json:"content"`
+	// Components of a SRV record.
+	Data SRVRecordData `json:"data"`
+	// Record type.
+	Type SRVRecordType `json:"type"`
+	JSON srvRecordJSON `json:"-"`
+}
+
+// srvRecordJSON contains the JSON metadata for the struct [SRVRecord]
+type srvRecordJSON struct {
+	Content     apijson.Field
+	Data        apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *SRVRecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r srvRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r SRVRecord) implementsDNSRecordNewResponse() {}
+
+func (r SRVRecord) implementsDNSRecordUpdateResponse() {}
+
+func (r SRVRecord) implementsDNSRecordListResponse() {}
+
+func (r SRVRecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r SRVRecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r SRVRecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r SRVRecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r SRVRecord) implementsDNSRecordEditResponse() {}
+
+func (r SRVRecord) implementsDNSRecordGetResponse() {}
+
+// Components of a SRV record.
+type SRVRecordData struct {
+	// The port of the service.
+	Port float64 `json:"port"`
+	// Required for MX, SRV and URI records; unused by other record types. Records with
+	// lower priorities are preferred.
+	Priority float64 `json:"priority"`
+	// A valid hostname.
+	Target string `json:"target" format:"hostname"`
+	// The record weight.
+	Weight float64           `json:"weight"`
+	JSON   srvRecordDataJSON `json:"-"`
+}
+
+// srvRecordDataJSON contains the JSON metadata for the struct [SRVRecordData]
+type srvRecordDataJSON struct {
+	Port        apijson.Field
+	Priority    apijson.Field
+	Target      apijson.Field
+	Weight      apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *SRVRecordData) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r srvRecordDataJSON) RawJSON() string {
+	return r.raw
+}
+
+// Record type.
+type SRVRecordType string
+
+const (
+	SRVRecordTypeSRV SRVRecordType = "SRV"
+)
+
+func (r SRVRecordType) IsKnown() bool {
+	switch r {
+	case SRVRecordTypeSRV:
+		return true
+	}
+	return false
+}
+
+type SRVRecordParam struct {
+	// Components of a SRV record.
 	Data param.Field[SRVRecordDataParam] `json:"data"`
 	// Record type.
 	Type param.Field[SRVRecordType] `json:"type"`
@@ -957,16 +2035,89 @@ func (r SRVRecordDataParam) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
+type SSHFPRecord struct {
+	// Formatted SSHFP content. See 'data' to set SSHFP properties.
+	Content string `json:"content"`
+	// Components of a SSHFP record.
+	Data SSHFPRecordData `json:"data"`
+	// Record type.
+	Type SSHFPRecordType `json:"type"`
+	JSON sshfpRecordJSON `json:"-"`
+}
+
+// sshfpRecordJSON contains the JSON metadata for the struct [SSHFPRecord]
+type sshfpRecordJSON struct {
+	Content     apijson.Field
+	Data        apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *SSHFPRecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r sshfpRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r SSHFPRecord) implementsDNSRecordNewResponse() {}
+
+func (r SSHFPRecord) implementsDNSRecordUpdateResponse() {}
+
+func (r SSHFPRecord) implementsDNSRecordListResponse() {}
+
+func (r SSHFPRecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r SSHFPRecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r SSHFPRecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r SSHFPRecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r SSHFPRecord) implementsDNSRecordEditResponse() {}
+
+func (r SSHFPRecord) implementsDNSRecordGetResponse() {}
+
+// Components of a SSHFP record.
+type SSHFPRecordData struct {
+	// algorithm.
+	Algorithm float64 `json:"algorithm"`
+	// fingerprint.
+	Fingerprint string `json:"fingerprint"`
+	// type.
+	Type float64             `json:"type"`
+	JSON sshfpRecordDataJSON `json:"-"`
+}
+
+// sshfpRecordDataJSON contains the JSON metadata for the struct [SSHFPRecordData]
+type sshfpRecordDataJSON struct {
+	Algorithm   apijson.Field
+	Fingerprint apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *SSHFPRecordData) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r sshfpRecordDataJSON) RawJSON() string {
+	return r.raw
+}
+
 // Record type.
-type SRVRecordType string
+type SSHFPRecordType string
 
 const (
-	SRVRecordTypeSRV SRVRecordType = "SRV"
+	SSHFPRecordTypeSSHFP SSHFPRecordType = "SSHFP"
 )
 
-func (r SRVRecordType) IsKnown() bool {
+func (r SSHFPRecordType) IsKnown() bool {
 	switch r {
-	case SRVRecordTypeSRV:
+	case SSHFPRecordTypeSSHFP:
 		return true
 	}
 	return false
@@ -999,16 +2150,89 @@ func (r SSHFPRecordDataParam) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
+type SVCBRecord struct {
+	// Formatted SVCB content. See 'data' to set SVCB properties.
+	Content string `json:"content"`
+	// Components of a SVCB record.
+	Data SVCBRecordData `json:"data"`
+	// Record type.
+	Type SVCBRecordType `json:"type"`
+	JSON svcbRecordJSON `json:"-"`
+}
+
+// svcbRecordJSON contains the JSON metadata for the struct [SVCBRecord]
+type svcbRecordJSON struct {
+	Content     apijson.Field
+	Data        apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *SVCBRecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r svcbRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r SVCBRecord) implementsDNSRecordNewResponse() {}
+
+func (r SVCBRecord) implementsDNSRecordUpdateResponse() {}
+
+func (r SVCBRecord) implementsDNSRecordListResponse() {}
+
+func (r SVCBRecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r SVCBRecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r SVCBRecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r SVCBRecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r SVCBRecord) implementsDNSRecordEditResponse() {}
+
+func (r SVCBRecord) implementsDNSRecordGetResponse() {}
+
+// Components of a SVCB record.
+type SVCBRecordData struct {
+	// priority.
+	Priority float64 `json:"priority"`
+	// target.
+	Target string `json:"target"`
+	// value.
+	Value string             `json:"value"`
+	JSON  svcbRecordDataJSON `json:"-"`
+}
+
+// svcbRecordDataJSON contains the JSON metadata for the struct [SVCBRecordData]
+type svcbRecordDataJSON struct {
+	Priority    apijson.Field
+	Target      apijson.Field
+	Value       apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *SVCBRecordData) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r svcbRecordDataJSON) RawJSON() string {
+	return r.raw
+}
+
 // Record type.
-type SSHFPRecordType string
+type SVCBRecordType string
 
 const (
-	SSHFPRecordTypeSSHFP SSHFPRecordType = "SSHFP"
+	SVCBRecordTypeSVCB SVCBRecordType = "SVCB"
 )
 
-func (r SSHFPRecordType) IsKnown() bool {
+func (r SVCBRecordType) IsKnown() bool {
 	switch r {
-	case SSHFPRecordTypeSSHFP:
+	case SVCBRecordTypeSVCB:
 		return true
 	}
 	return false
@@ -1041,16 +2265,92 @@ func (r SVCBRecordDataParam) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
+type TLSARecord struct {
+	// Formatted TLSA content. See 'data' to set TLSA properties.
+	Content string `json:"content"`
+	// Components of a TLSA record.
+	Data TLSARecordData `json:"data"`
+	// Record type.
+	Type TLSARecordType `json:"type"`
+	JSON tlsaRecordJSON `json:"-"`
+}
+
+// tlsaRecordJSON contains the JSON metadata for the struct [TLSARecord]
+type tlsaRecordJSON struct {
+	Content     apijson.Field
+	Data        apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *TLSARecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r tlsaRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r TLSARecord) implementsDNSRecordNewResponse() {}
+
+func (r TLSARecord) implementsDNSRecordUpdateResponse() {}
+
+func (r TLSARecord) implementsDNSRecordListResponse() {}
+
+func (r TLSARecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r TLSARecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r TLSARecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r TLSARecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r TLSARecord) implementsDNSRecordEditResponse() {}
+
+func (r TLSARecord) implementsDNSRecordGetResponse() {}
+
+// Components of a TLSA record.
+type TLSARecordData struct {
+	// certificate.
+	Certificate string `json:"certificate"`
+	// Matching Type.
+	MatchingType float64 `json:"matching_type"`
+	// Selector.
+	Selector float64 `json:"selector"`
+	// Usage.
+	Usage float64            `json:"usage"`
+	JSON  tlsaRecordDataJSON `json:"-"`
+}
+
+// tlsaRecordDataJSON contains the JSON metadata for the struct [TLSARecordData]
+type tlsaRecordDataJSON struct {
+	Certificate  apijson.Field
+	MatchingType apijson.Field
+	Selector     apijson.Field
+	Usage        apijson.Field
+	raw          string
+	ExtraFields  map[string]apijson.Field
+}
+
+func (r *TLSARecordData) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r tlsaRecordDataJSON) RawJSON() string {
+	return r.raw
+}
+
 // Record type.
-type SVCBRecordType string
+type TLSARecordType string
 
 const (
-	SVCBRecordTypeSVCB SVCBRecordType = "SVCB"
+	TLSARecordTypeTLSA TLSARecordType = "TLSA"
 )
 
-func (r SVCBRecordType) IsKnown() bool {
+func (r TLSARecordType) IsKnown() bool {
 	switch r {
-	case SVCBRecordTypeSVCB:
+	case TLSARecordTypeTLSA:
 		return true
 	}
 	return false
@@ -1085,52 +2385,52 @@ func (r TLSARecordDataParam) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
-// Record type.
-type TLSARecordType string
-
-const (
-	TLSARecordTypeTLSA TLSARecordType = "TLSA"
-)
-
-func (r TLSARecordType) IsKnown() bool {
-	switch r {
-	case TLSARecordTypeTLSA:
-		return true
-	}
-	return false
-}
-
-type TTL float64
-
-const (
-	TTL1 TTL = 1
-)
-
-func (r TTL) IsKnown() bool {
-	switch r {
-	case TTL1:
-		return true
-	}
-	return false
-}
-
-type TXTRecordParam struct {
+type TXTRecord struct {
 	// Text content for the record. The content must consist of quoted "character
 	// strings" (RFC 1035), each with a length of up to 255 bytes. Strings exceeding
 	// this allowed maximum length are automatically split.
 	//
 	// Learn more at
 	// <https://www.cloudflare.com/learning/dns/dns-records/dns-txt-record/>.
-	Content param.Field[string] `json:"content"`
+	Content string `json:"content"`
 	// Record type.
-	Type param.Field[TXTRecordType] `json:"type"`
+	Type TXTRecordType `json:"type"`
+	JSON txtRecordJSON `json:"-"`
 }
 
-func (r TXTRecordParam) MarshalJSON() (data []byte, err error) {
-	return apijson.MarshalRoot(r)
+// txtRecordJSON contains the JSON metadata for the struct [TXTRecord]
+type txtRecordJSON struct {
+	Content     apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
 }
 
-func (r TXTRecordParam) implementsDNSRecordUnionParam() {}
+func (r *TXTRecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r txtRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r TXTRecord) implementsDNSRecordNewResponse() {}
+
+func (r TXTRecord) implementsDNSRecordUpdateResponse() {}
+
+func (r TXTRecord) implementsDNSRecordListResponse() {}
+
+func (r TXTRecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r TXTRecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r TXTRecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r TXTRecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r TXTRecord) implementsDNSRecordEditResponse() {}
+
+func (r TXTRecord) implementsDNSRecordGetResponse() {}
 
 // Record type.
 type TXTRecordType string
@@ -1147,32 +2447,96 @@ func (r TXTRecordType) IsKnown() bool {
 	return false
 }
 
-type URIRecordParam struct {
+type TXTRecordParam struct {
+	// Text content for the record. The content must consist of quoted "character
+	// strings" (RFC 1035), each with a length of up to 255 bytes. Strings exceeding
+	// this allowed maximum length are automatically split.
+	//
+	// Learn more at
+	// <https://www.cloudflare.com/learning/dns/dns-records/dns-txt-record/>.
+	Content param.Field[string] `json:"content"`
+	// Record type.
+	Type param.Field[TXTRecordType] `json:"type"`
+}
+
+func (r TXTRecordParam) MarshalJSON() (data []byte, err error) {
+	return apijson.MarshalRoot(r)
+}
+
+func (r TXTRecordParam) implementsDNSRecordUnionParam() {}
+
+type URIRecord struct {
+	// Formatted URI content. See 'data' to set URI properties.
+	Content string `json:"content"`
 	// Components of a URI record.
-	Data param.Field[URIRecordDataParam] `json:"data"`
+	Data URIRecordData `json:"data"`
 	// Required for MX, SRV and URI records; unused by other record types. Records with
 	// lower priorities are preferred.
-	Priority param.Field[float64] `json:"priority"`
+	Priority float64 `json:"priority"`
 	// Record type.
-	Type param.Field[URIRecordType] `json:"type"`
+	Type URIRecordType `json:"type"`
+	JSON uriRecordJSON `json:"-"`
 }
 
-func (r URIRecordParam) MarshalJSON() (data []byte, err error) {
-	return apijson.MarshalRoot(r)
+// uriRecordJSON contains the JSON metadata for the struct [URIRecord]
+type uriRecordJSON struct {
+	Content     apijson.Field
+	Data        apijson.Field
+	Priority    apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
 }
 
-func (r URIRecordParam) implementsDNSRecordUnionParam() {}
+func (r *URIRecord) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r uriRecordJSON) RawJSON() string {
+	return r.raw
+}
+
+func (r URIRecord) implementsDNSRecordNewResponse() {}
+
+func (r URIRecord) implementsDNSRecordUpdateResponse() {}
+
+func (r URIRecord) implementsDNSRecordListResponse() {}
+
+func (r URIRecord) implementsDNSRecordBatchResponseDelete() {}
+
+func (r URIRecord) implementsDNSRecordBatchResponsePatch() {}
+
+func (r URIRecord) implementsDNSRecordBatchResponsePost() {}
+
+func (r URIRecord) implementsDNSRecordBatchResponsePut() {}
+
+func (r URIRecord) implementsDNSRecordEditResponse() {}
+
+func (r URIRecord) implementsDNSRecordGetResponse() {}
 
 // Components of a URI record.
-type URIRecordDataParam struct {
+type URIRecordData struct {
 	// The record content.
-	Target param.Field[string] `json:"target"`
+	Target string `json:"target"`
 	// The record weight.
-	Weight param.Field[float64] `json:"weight"`
+	Weight float64           `json:"weight"`
+	JSON   uriRecordDataJSON `json:"-"`
 }
 
-func (r URIRecordDataParam) MarshalJSON() (data []byte, err error) {
-	return apijson.MarshalRoot(r)
+// uriRecordDataJSON contains the JSON metadata for the struct [URIRecordData]
+type uriRecordDataJSON struct {
+	Target      apijson.Field
+	Weight      apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *URIRecordData) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r uriRecordDataJSON) RawJSON() string {
+	return r.raw
 }
 
 // Record type.
@@ -1190,192 +2554,802 @@ func (r URIRecordType) IsKnown() bool {
 	return false
 }
 
+type URIRecordParam struct {
+	// Components of a URI record.
+	Data param.Field[URIRecordDataParam] `json:"data"`
+	// Required for MX, SRV and URI records; unused by other record types. Records with
+	// lower priorities are preferred.
+	Priority param.Field[float64] `json:"priority"`
+	// Record type.
+	Type param.Field[URIRecordType] `json:"type"`
+}
+
+func (r URIRecordParam) MarshalJSON() (data []byte, err error) {
+	return apijson.MarshalRoot(r)
+}
+
+func (r URIRecordParam) implementsDNSRecordUnionParam() {}
+
+// Components of a URI record.
+type URIRecordDataParam struct {
+	// The record content.
+	Target param.Field[string] `json:"target"`
+	// The record weight.
+	Weight param.Field[float64] `json:"weight"`
+}
+
+func (r URIRecordDataParam) MarshalJSON() (data []byte, err error) {
+	return apijson.MarshalRoot(r)
+}
+
 type RecordNewResponse struct {
-	// Identifier
-	ID string `json:"id,required"`
-	// Comments or notes about the DNS record. This field has no effect on DNS
-	// responses.
-	Comment string `json:"comment,required"`
-	// When the record was created.
-	CreatedOn time.Time `json:"created_on,required" format:"date-time"`
-	// Extra Cloudflare-specific information about the record.
-	Meta interface{} `json:"meta,required"`
-	// When the record was last modified.
-	ModifiedOn time.Time `json:"modified_on,required" format:"date-time"`
-	// DNS record name (or @ for the zone apex) in Punycode.
-	Name string `json:"name,required"`
-	// Whether the record can be proxied by Cloudflare or not.
-	Proxiable bool `json:"proxiable,required"`
-	// Whether the record is receiving the performance and security benefits of
-	// Cloudflare.
-	Proxied bool `json:"proxied,required"`
-	// Settings for the DNS record.
+	// A valid IPv4 address.
+	Content string `json:"content" format:"ipv4"`
+	// Record type.
+	Type RecordNewResponseType `json:"type"`
+	// This field can have the runtime type of [CAARecordData], [CERTRecordData],
+	// [DNSKEYRecordData], [DSRecordData], [HTTPSRecordData], [LOCRecordData],
+	// [NAPTRRecordData], [SMIMEARecordData], [SRVRecordData], [SSHFPRecordData],
+	// [SVCBRecordData], [TLSARecordData], [URIRecordData].
+	Data interface{} `json:"data,required"`
+	// This field can have the runtime type of [CNAMERecordSettings].
 	Settings interface{} `json:"settings,required"`
-	// Custom tags for the DNS record. This field has no effect on DNS responses.
-	Tags []RecordTags `json:"tags,required"`
-	// Time To Live (TTL) of the DNS record in seconds. Setting to 1 means 'automatic'.
-	// Value must be between 60 and 86400, with the minimum reduced to 30 for
-	// Enterprise zones.
-	TTL TTL `json:"ttl,required"`
-	// When the record comment was last modified. Omitted if there is no comment.
-	CommentModifiedOn time.Time `json:"comment_modified_on" format:"date-time"`
-	// When the record tags were last modified. Omitted if there are no tags.
-	TagsModifiedOn time.Time             `json:"tags_modified_on" format:"date-time"`
-	JSON           recordNewResponseJSON `json:"-"`
+	// Required for MX, SRV and URI records; unused by other record types. Records with
+	// lower priorities are preferred.
+	Priority float64               `json:"priority"`
+	JSON     recordNewResponseJSON `json:"-"`
+	union    RecordNewResponseUnion
 }
 
 // recordNewResponseJSON contains the JSON metadata for the struct
 // [RecordNewResponse]
 type recordNewResponseJSON struct {
-	ID                apijson.Field
-	Comment           apijson.Field
-	CreatedOn         apijson.Field
-	Meta              apijson.Field
-	ModifiedOn        apijson.Field
-	Name              apijson.Field
-	Proxiable         apijson.Field
-	Proxied           apijson.Field
-	Settings          apijson.Field
-	Tags              apijson.Field
-	TTL               apijson.Field
-	CommentModifiedOn apijson.Field
-	TagsModifiedOn    apijson.Field
-	raw               string
-	ExtraFields       map[string]apijson.Field
+	Content     apijson.Field
+	Type        apijson.Field
+	Data        apijson.Field
+	Settings    apijson.Field
+	Priority    apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r recordNewResponseJSON) RawJSON() string {
+	return r.raw
 }
 
 func (r *RecordNewResponse) UnmarshalJSON(data []byte) (err error) {
+	*r = RecordNewResponse{}
+	err = apijson.UnmarshalRoot(data, &r.union)
+	if err != nil {
+		return err
+	}
+	return apijson.Port(r.union, &r)
+}
+
+// AsUnion returns a [RecordNewResponseUnion] interface which you can cast to the
+// specific types for more type safety.
+//
+// Possible runtime types of the union are [dns.ARecord], [dns.AAAARecord],
+// [dns.CAARecord], [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord],
+// [dns.DSRecord], [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord],
+// [dns.NAPTRRecord], [dns.NSRecord], [dns.RecordNewResponseOpenpgpkey],
+// [dns.PTRRecord], [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord],
+// [dns.SVCBRecord], [dns.TLSARecord], [dns.TXTRecord], [dns.URIRecord].
+func (r RecordNewResponse) AsUnion() RecordNewResponseUnion {
+	return r.union
+}
+
+// Union satisfied by [dns.ARecord], [dns.AAAARecord], [dns.CAARecord],
+// [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord], [dns.DSRecord],
+// [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord], [dns.NAPTRRecord],
+// [dns.NSRecord], [dns.RecordNewResponseOpenpgpkey], [dns.PTRRecord],
+// [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord], [dns.SVCBRecord],
+// [dns.TLSARecord], [dns.TXTRecord] or [dns.URIRecord].
+type RecordNewResponseUnion interface {
+	implementsDNSRecordNewResponse()
+}
+
+func init() {
+	apijson.RegisterUnion(
+		reflect.TypeOf((*RecordNewResponseUnion)(nil)).Elem(),
+		"type",
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(ARecord{}),
+			DiscriminatorValue: "A",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(AAAARecord{}),
+			DiscriminatorValue: "AAAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CAARecord{}),
+			DiscriminatorValue: "CAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CERTRecord{}),
+			DiscriminatorValue: "CERT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CNAMERecord{}),
+			DiscriminatorValue: "CNAME",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DNSKEYRecord{}),
+			DiscriminatorValue: "DNSKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DSRecord{}),
+			DiscriminatorValue: "DS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(HTTPSRecord{}),
+			DiscriminatorValue: "HTTPS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(LOCRecord{}),
+			DiscriminatorValue: "LOC",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(MXRecord{}),
+			DiscriminatorValue: "MX",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NAPTRRecord{}),
+			DiscriminatorValue: "NAPTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NSRecord{}),
+			DiscriminatorValue: "NS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(RecordNewResponseOpenpgpkey{}),
+			DiscriminatorValue: "OPENPGPKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(PTRRecord{}),
+			DiscriminatorValue: "PTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SMIMEARecord{}),
+			DiscriminatorValue: "SMIMEA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SRVRecord{}),
+			DiscriminatorValue: "SRV",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SSHFPRecord{}),
+			DiscriminatorValue: "SSHFP",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SVCBRecord{}),
+			DiscriminatorValue: "SVCB",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TLSARecord{}),
+			DiscriminatorValue: "TLSA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TXTRecord{}),
+			DiscriminatorValue: "TXT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(URIRecord{}),
+			DiscriminatorValue: "URI",
+		},
+	)
+}
+
+type RecordNewResponseOpenpgpkey struct {
+	// A single Base64-encoded OpenPGP Transferable Public Key (RFC 4880 Section 11.1)
+	Content string `json:"content"`
+	// Record type.
+	Type RecordNewResponseOpenpgpkeyType `json:"type"`
+	JSON recordNewResponseOpenpgpkeyJSON `json:"-"`
+}
+
+// recordNewResponseOpenpgpkeyJSON contains the JSON metadata for the struct
+// [RecordNewResponseOpenpgpkey]
+type recordNewResponseOpenpgpkeyJSON struct {
+	Content     apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *RecordNewResponseOpenpgpkey) UnmarshalJSON(data []byte) (err error) {
 	return apijson.UnmarshalRoot(data, r)
 }
 
-func (r recordNewResponseJSON) RawJSON() string {
+func (r recordNewResponseOpenpgpkeyJSON) RawJSON() string {
 	return r.raw
 }
 
+func (r RecordNewResponseOpenpgpkey) implementsDNSRecordNewResponse() {}
+
+// Record type.
+type RecordNewResponseOpenpgpkeyType string
+
+const (
+	RecordNewResponseOpenpgpkeyTypeOpenpgpkey RecordNewResponseOpenpgpkeyType = "OPENPGPKEY"
+)
+
+func (r RecordNewResponseOpenpgpkeyType) IsKnown() bool {
+	switch r {
+	case RecordNewResponseOpenpgpkeyTypeOpenpgpkey:
+		return true
+	}
+	return false
+}
+
+// Record type.
+type RecordNewResponseType string
+
+const (
+	RecordNewResponseTypeA          RecordNewResponseType = "A"
+	RecordNewResponseTypeAAAA       RecordNewResponseType = "AAAA"
+	RecordNewResponseTypeCAA        RecordNewResponseType = "CAA"
+	RecordNewResponseTypeCERT       RecordNewResponseType = "CERT"
+	RecordNewResponseTypeCNAME      RecordNewResponseType = "CNAME"
+	RecordNewResponseTypeDNSKEY     RecordNewResponseType = "DNSKEY"
+	RecordNewResponseTypeDS         RecordNewResponseType = "DS"
+	RecordNewResponseTypeHTTPS      RecordNewResponseType = "HTTPS"
+	RecordNewResponseTypeLOC        RecordNewResponseType = "LOC"
+	RecordNewResponseTypeMX         RecordNewResponseType = "MX"
+	RecordNewResponseTypeNAPTR      RecordNewResponseType = "NAPTR"
+	RecordNewResponseTypeNS         RecordNewResponseType = "NS"
+	RecordNewResponseTypeOpenpgpkey RecordNewResponseType = "OPENPGPKEY"
+	RecordNewResponseTypePTR        RecordNewResponseType = "PTR"
+	RecordNewResponseTypeSMIMEA     RecordNewResponseType = "SMIMEA"
+	RecordNewResponseTypeSRV        RecordNewResponseType = "SRV"
+	RecordNewResponseTypeSSHFP      RecordNewResponseType = "SSHFP"
+	RecordNewResponseTypeSVCB       RecordNewResponseType = "SVCB"
+	RecordNewResponseTypeTLSA       RecordNewResponseType = "TLSA"
+	RecordNewResponseTypeTXT        RecordNewResponseType = "TXT"
+	RecordNewResponseTypeURI        RecordNewResponseType = "URI"
+)
+
+func (r RecordNewResponseType) IsKnown() bool {
+	switch r {
+	case RecordNewResponseTypeA, RecordNewResponseTypeAAAA, RecordNewResponseTypeCAA, RecordNewResponseTypeCERT, RecordNewResponseTypeCNAME, RecordNewResponseTypeDNSKEY, RecordNewResponseTypeDS, RecordNewResponseTypeHTTPS, RecordNewResponseTypeLOC, RecordNewResponseTypeMX, RecordNewResponseTypeNAPTR, RecordNewResponseTypeNS, RecordNewResponseTypeOpenpgpkey, RecordNewResponseTypePTR, RecordNewResponseTypeSMIMEA, RecordNewResponseTypeSRV, RecordNewResponseTypeSSHFP, RecordNewResponseTypeSVCB, RecordNewResponseTypeTLSA, RecordNewResponseTypeTXT, RecordNewResponseTypeURI:
+		return true
+	}
+	return false
+}
+
 type RecordUpdateResponse struct {
-	// Identifier
-	ID string `json:"id,required"`
-	// Comments or notes about the DNS record. This field has no effect on DNS
-	// responses.
-	Comment string `json:"comment,required"`
-	// When the record was created.
-	CreatedOn time.Time `json:"created_on,required" format:"date-time"`
-	// Extra Cloudflare-specific information about the record.
-	Meta interface{} `json:"meta,required"`
-	// When the record was last modified.
-	ModifiedOn time.Time `json:"modified_on,required" format:"date-time"`
-	// DNS record name (or @ for the zone apex) in Punycode.
-	Name string `json:"name,required"`
-	// Whether the record can be proxied by Cloudflare or not.
-	Proxiable bool `json:"proxiable,required"`
-	// Whether the record is receiving the performance and security benefits of
-	// Cloudflare.
-	Proxied bool `json:"proxied,required"`
-	// Settings for the DNS record.
+	// A valid IPv4 address.
+	Content string `json:"content" format:"ipv4"`
+	// Record type.
+	Type RecordUpdateResponseType `json:"type"`
+	// This field can have the runtime type of [CAARecordData], [CERTRecordData],
+	// [DNSKEYRecordData], [DSRecordData], [HTTPSRecordData], [LOCRecordData],
+	// [NAPTRRecordData], [SMIMEARecordData], [SRVRecordData], [SSHFPRecordData],
+	// [SVCBRecordData], [TLSARecordData], [URIRecordData].
+	Data interface{} `json:"data,required"`
+	// This field can have the runtime type of [CNAMERecordSettings].
 	Settings interface{} `json:"settings,required"`
-	// Custom tags for the DNS record. This field has no effect on DNS responses.
-	Tags []RecordTags `json:"tags,required"`
-	// Time To Live (TTL) of the DNS record in seconds. Setting to 1 means 'automatic'.
-	// Value must be between 60 and 86400, with the minimum reduced to 30 for
-	// Enterprise zones.
-	TTL TTL `json:"ttl,required"`
-	// When the record comment was last modified. Omitted if there is no comment.
-	CommentModifiedOn time.Time `json:"comment_modified_on" format:"date-time"`
-	// When the record tags were last modified. Omitted if there are no tags.
-	TagsModifiedOn time.Time                `json:"tags_modified_on" format:"date-time"`
-	JSON           recordUpdateResponseJSON `json:"-"`
+	// Required for MX, SRV and URI records; unused by other record types. Records with
+	// lower priorities are preferred.
+	Priority float64                  `json:"priority"`
+	JSON     recordUpdateResponseJSON `json:"-"`
+	union    RecordUpdateResponseUnion
 }
 
 // recordUpdateResponseJSON contains the JSON metadata for the struct
 // [RecordUpdateResponse]
 type recordUpdateResponseJSON struct {
-	ID                apijson.Field
-	Comment           apijson.Field
-	CreatedOn         apijson.Field
-	Meta              apijson.Field
-	ModifiedOn        apijson.Field
-	Name              apijson.Field
-	Proxiable         apijson.Field
-	Proxied           apijson.Field
-	Settings          apijson.Field
-	Tags              apijson.Field
-	TTL               apijson.Field
-	CommentModifiedOn apijson.Field
-	TagsModifiedOn    apijson.Field
-	raw               string
-	ExtraFields       map[string]apijson.Field
+	Content     apijson.Field
+	Type        apijson.Field
+	Data        apijson.Field
+	Settings    apijson.Field
+	Priority    apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r recordUpdateResponseJSON) RawJSON() string {
+	return r.raw
 }
 
 func (r *RecordUpdateResponse) UnmarshalJSON(data []byte) (err error) {
+	*r = RecordUpdateResponse{}
+	err = apijson.UnmarshalRoot(data, &r.union)
+	if err != nil {
+		return err
+	}
+	return apijson.Port(r.union, &r)
+}
+
+// AsUnion returns a [RecordUpdateResponseUnion] interface which you can cast to
+// the specific types for more type safety.
+//
+// Possible runtime types of the union are [dns.ARecord], [dns.AAAARecord],
+// [dns.CAARecord], [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord],
+// [dns.DSRecord], [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord],
+// [dns.NAPTRRecord], [dns.NSRecord], [dns.RecordUpdateResponseOpenpgpkey],
+// [dns.PTRRecord], [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord],
+// [dns.SVCBRecord], [dns.TLSARecord], [dns.TXTRecord], [dns.URIRecord].
+func (r RecordUpdateResponse) AsUnion() RecordUpdateResponseUnion {
+	return r.union
+}
+
+// Union satisfied by [dns.ARecord], [dns.AAAARecord], [dns.CAARecord],
+// [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord], [dns.DSRecord],
+// [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord], [dns.NAPTRRecord],
+// [dns.NSRecord], [dns.RecordUpdateResponseOpenpgpkey], [dns.PTRRecord],
+// [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord], [dns.SVCBRecord],
+// [dns.TLSARecord], [dns.TXTRecord] or [dns.URIRecord].
+type RecordUpdateResponseUnion interface {
+	implementsDNSRecordUpdateResponse()
+}
+
+func init() {
+	apijson.RegisterUnion(
+		reflect.TypeOf((*RecordUpdateResponseUnion)(nil)).Elem(),
+		"type",
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(ARecord{}),
+			DiscriminatorValue: "A",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(AAAARecord{}),
+			DiscriminatorValue: "AAAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CAARecord{}),
+			DiscriminatorValue: "CAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CERTRecord{}),
+			DiscriminatorValue: "CERT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CNAMERecord{}),
+			DiscriminatorValue: "CNAME",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DNSKEYRecord{}),
+			DiscriminatorValue: "DNSKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DSRecord{}),
+			DiscriminatorValue: "DS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(HTTPSRecord{}),
+			DiscriminatorValue: "HTTPS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(LOCRecord{}),
+			DiscriminatorValue: "LOC",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(MXRecord{}),
+			DiscriminatorValue: "MX",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NAPTRRecord{}),
+			DiscriminatorValue: "NAPTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NSRecord{}),
+			DiscriminatorValue: "NS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(RecordUpdateResponseOpenpgpkey{}),
+			DiscriminatorValue: "OPENPGPKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(PTRRecord{}),
+			DiscriminatorValue: "PTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SMIMEARecord{}),
+			DiscriminatorValue: "SMIMEA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SRVRecord{}),
+			DiscriminatorValue: "SRV",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SSHFPRecord{}),
+			DiscriminatorValue: "SSHFP",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SVCBRecord{}),
+			DiscriminatorValue: "SVCB",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TLSARecord{}),
+			DiscriminatorValue: "TLSA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TXTRecord{}),
+			DiscriminatorValue: "TXT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(URIRecord{}),
+			DiscriminatorValue: "URI",
+		},
+	)
+}
+
+type RecordUpdateResponseOpenpgpkey struct {
+	// A single Base64-encoded OpenPGP Transferable Public Key (RFC 4880 Section 11.1)
+	Content string `json:"content"`
+	// Record type.
+	Type RecordUpdateResponseOpenpgpkeyType `json:"type"`
+	JSON recordUpdateResponseOpenpgpkeyJSON `json:"-"`
+}
+
+// recordUpdateResponseOpenpgpkeyJSON contains the JSON metadata for the struct
+// [RecordUpdateResponseOpenpgpkey]
+type recordUpdateResponseOpenpgpkeyJSON struct {
+	Content     apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *RecordUpdateResponseOpenpgpkey) UnmarshalJSON(data []byte) (err error) {
 	return apijson.UnmarshalRoot(data, r)
 }
 
-func (r recordUpdateResponseJSON) RawJSON() string {
+func (r recordUpdateResponseOpenpgpkeyJSON) RawJSON() string {
 	return r.raw
 }
 
+func (r RecordUpdateResponseOpenpgpkey) implementsDNSRecordUpdateResponse() {}
+
+// Record type.
+type RecordUpdateResponseOpenpgpkeyType string
+
+const (
+	RecordUpdateResponseOpenpgpkeyTypeOpenpgpkey RecordUpdateResponseOpenpgpkeyType = "OPENPGPKEY"
+)
+
+func (r RecordUpdateResponseOpenpgpkeyType) IsKnown() bool {
+	switch r {
+	case RecordUpdateResponseOpenpgpkeyTypeOpenpgpkey:
+		return true
+	}
+	return false
+}
+
+// Record type.
+type RecordUpdateResponseType string
+
+const (
+	RecordUpdateResponseTypeA          RecordUpdateResponseType = "A"
+	RecordUpdateResponseTypeAAAA       RecordUpdateResponseType = "AAAA"
+	RecordUpdateResponseTypeCAA        RecordUpdateResponseType = "CAA"
+	RecordUpdateResponseTypeCERT       RecordUpdateResponseType = "CERT"
+	RecordUpdateResponseTypeCNAME      RecordUpdateResponseType = "CNAME"
+	RecordUpdateResponseTypeDNSKEY     RecordUpdateResponseType = "DNSKEY"
+	RecordUpdateResponseTypeDS         RecordUpdateResponseType = "DS"
+	RecordUpdateResponseTypeHTTPS      RecordUpdateResponseType = "HTTPS"
+	RecordUpdateResponseTypeLOC        RecordUpdateResponseType = "LOC"
+	RecordUpdateResponseTypeMX         RecordUpdateResponseType = "MX"
+	RecordUpdateResponseTypeNAPTR      RecordUpdateResponseType = "NAPTR"
+	RecordUpdateResponseTypeNS         RecordUpdateResponseType = "NS"
+	RecordUpdateResponseTypeOpenpgpkey RecordUpdateResponseType = "OPENPGPKEY"
+	RecordUpdateResponseTypePTR        RecordUpdateResponseType = "PTR"
+	RecordUpdateResponseTypeSMIMEA     RecordUpdateResponseType = "SMIMEA"
+	RecordUpdateResponseTypeSRV        RecordUpdateResponseType = "SRV"
+	RecordUpdateResponseTypeSSHFP      RecordUpdateResponseType = "SSHFP"
+	RecordUpdateResponseTypeSVCB       RecordUpdateResponseType = "SVCB"
+	RecordUpdateResponseTypeTLSA       RecordUpdateResponseType = "TLSA"
+	RecordUpdateResponseTypeTXT        RecordUpdateResponseType = "TXT"
+	RecordUpdateResponseTypeURI        RecordUpdateResponseType = "URI"
+)
+
+func (r RecordUpdateResponseType) IsKnown() bool {
+	switch r {
+	case RecordUpdateResponseTypeA, RecordUpdateResponseTypeAAAA, RecordUpdateResponseTypeCAA, RecordUpdateResponseTypeCERT, RecordUpdateResponseTypeCNAME, RecordUpdateResponseTypeDNSKEY, RecordUpdateResponseTypeDS, RecordUpdateResponseTypeHTTPS, RecordUpdateResponseTypeLOC, RecordUpdateResponseTypeMX, RecordUpdateResponseTypeNAPTR, RecordUpdateResponseTypeNS, RecordUpdateResponseTypeOpenpgpkey, RecordUpdateResponseTypePTR, RecordUpdateResponseTypeSMIMEA, RecordUpdateResponseTypeSRV, RecordUpdateResponseTypeSSHFP, RecordUpdateResponseTypeSVCB, RecordUpdateResponseTypeTLSA, RecordUpdateResponseTypeTXT, RecordUpdateResponseTypeURI:
+		return true
+	}
+	return false
+}
+
 type RecordListResponse struct {
-	// Identifier
-	ID string `json:"id,required"`
-	// Comments or notes about the DNS record. This field has no effect on DNS
-	// responses.
-	Comment string `json:"comment,required"`
-	// When the record was created.
-	CreatedOn time.Time `json:"created_on,required" format:"date-time"`
-	// Extra Cloudflare-specific information about the record.
-	Meta interface{} `json:"meta,required"`
-	// When the record was last modified.
-	ModifiedOn time.Time `json:"modified_on,required" format:"date-time"`
-	// DNS record name (or @ for the zone apex) in Punycode.
-	Name string `json:"name,required"`
-	// Whether the record can be proxied by Cloudflare or not.
-	Proxiable bool `json:"proxiable,required"`
-	// Whether the record is receiving the performance and security benefits of
-	// Cloudflare.
-	Proxied bool `json:"proxied,required"`
-	// Settings for the DNS record.
+	// A valid IPv4 address.
+	Content string `json:"content" format:"ipv4"`
+	// Record type.
+	Type RecordListResponseType `json:"type"`
+	// This field can have the runtime type of [CAARecordData], [CERTRecordData],
+	// [DNSKEYRecordData], [DSRecordData], [HTTPSRecordData], [LOCRecordData],
+	// [NAPTRRecordData], [SMIMEARecordData], [SRVRecordData], [SSHFPRecordData],
+	// [SVCBRecordData], [TLSARecordData], [URIRecordData].
+	Data interface{} `json:"data,required"`
+	// This field can have the runtime type of [CNAMERecordSettings].
 	Settings interface{} `json:"settings,required"`
-	// Custom tags for the DNS record. This field has no effect on DNS responses.
-	Tags []RecordTags `json:"tags,required"`
-	// Time To Live (TTL) of the DNS record in seconds. Setting to 1 means 'automatic'.
-	// Value must be between 60 and 86400, with the minimum reduced to 30 for
-	// Enterprise zones.
-	TTL TTL `json:"ttl,required"`
-	// When the record comment was last modified. Omitted if there is no comment.
-	CommentModifiedOn time.Time `json:"comment_modified_on" format:"date-time"`
-	// When the record tags were last modified. Omitted if there are no tags.
-	TagsModifiedOn time.Time              `json:"tags_modified_on" format:"date-time"`
-	JSON           recordListResponseJSON `json:"-"`
+	// Required for MX, SRV and URI records; unused by other record types. Records with
+	// lower priorities are preferred.
+	Priority float64                `json:"priority"`
+	JSON     recordListResponseJSON `json:"-"`
+	union    RecordListResponseUnion
 }
 
 // recordListResponseJSON contains the JSON metadata for the struct
 // [RecordListResponse]
 type recordListResponseJSON struct {
-	ID                apijson.Field
-	Comment           apijson.Field
-	CreatedOn         apijson.Field
-	Meta              apijson.Field
-	ModifiedOn        apijson.Field
-	Name              apijson.Field
-	Proxiable         apijson.Field
-	Proxied           apijson.Field
-	Settings          apijson.Field
-	Tags              apijson.Field
-	TTL               apijson.Field
-	CommentModifiedOn apijson.Field
-	TagsModifiedOn    apijson.Field
-	raw               string
-	ExtraFields       map[string]apijson.Field
+	Content     apijson.Field
+	Type        apijson.Field
+	Data        apijson.Field
+	Settings    apijson.Field
+	Priority    apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r recordListResponseJSON) RawJSON() string {
+	return r.raw
 }
 
 func (r *RecordListResponse) UnmarshalJSON(data []byte) (err error) {
+	*r = RecordListResponse{}
+	err = apijson.UnmarshalRoot(data, &r.union)
+	if err != nil {
+		return err
+	}
+	return apijson.Port(r.union, &r)
+}
+
+// AsUnion returns a [RecordListResponseUnion] interface which you can cast to the
+// specific types for more type safety.
+//
+// Possible runtime types of the union are [dns.ARecord], [dns.AAAARecord],
+// [dns.CAARecord], [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord],
+// [dns.DSRecord], [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord],
+// [dns.NAPTRRecord], [dns.NSRecord], [dns.RecordListResponseOpenpgpkey],
+// [dns.PTRRecord], [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord],
+// [dns.SVCBRecord], [dns.TLSARecord], [dns.TXTRecord], [dns.URIRecord].
+func (r RecordListResponse) AsUnion() RecordListResponseUnion {
+	return r.union
+}
+
+// Union satisfied by [dns.ARecord], [dns.AAAARecord], [dns.CAARecord],
+// [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord], [dns.DSRecord],
+// [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord], [dns.NAPTRRecord],
+// [dns.NSRecord], [dns.RecordListResponseOpenpgpkey], [dns.PTRRecord],
+// [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord], [dns.SVCBRecord],
+// [dns.TLSARecord], [dns.TXTRecord] or [dns.URIRecord].
+type RecordListResponseUnion interface {
+	implementsDNSRecordListResponse()
+}
+
+func init() {
+	apijson.RegisterUnion(
+		reflect.TypeOf((*RecordListResponseUnion)(nil)).Elem(),
+		"type",
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(ARecord{}),
+			DiscriminatorValue: "A",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(AAAARecord{}),
+			DiscriminatorValue: "AAAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CAARecord{}),
+			DiscriminatorValue: "CAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CERTRecord{}),
+			DiscriminatorValue: "CERT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CNAMERecord{}),
+			DiscriminatorValue: "CNAME",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DNSKEYRecord{}),
+			DiscriminatorValue: "DNSKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DSRecord{}),
+			DiscriminatorValue: "DS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(HTTPSRecord{}),
+			DiscriminatorValue: "HTTPS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(LOCRecord{}),
+			DiscriminatorValue: "LOC",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(MXRecord{}),
+			DiscriminatorValue: "MX",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NAPTRRecord{}),
+			DiscriminatorValue: "NAPTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NSRecord{}),
+			DiscriminatorValue: "NS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(RecordListResponseOpenpgpkey{}),
+			DiscriminatorValue: "OPENPGPKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(PTRRecord{}),
+			DiscriminatorValue: "PTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SMIMEARecord{}),
+			DiscriminatorValue: "SMIMEA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SRVRecord{}),
+			DiscriminatorValue: "SRV",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SSHFPRecord{}),
+			DiscriminatorValue: "SSHFP",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SVCBRecord{}),
+			DiscriminatorValue: "SVCB",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TLSARecord{}),
+			DiscriminatorValue: "TLSA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TXTRecord{}),
+			DiscriminatorValue: "TXT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(URIRecord{}),
+			DiscriminatorValue: "URI",
+		},
+	)
+}
+
+type RecordListResponseOpenpgpkey struct {
+	// A single Base64-encoded OpenPGP Transferable Public Key (RFC 4880 Section 11.1)
+	Content string `json:"content"`
+	// Record type.
+	Type RecordListResponseOpenpgpkeyType `json:"type"`
+	JSON recordListResponseOpenpgpkeyJSON `json:"-"`
+}
+
+// recordListResponseOpenpgpkeyJSON contains the JSON metadata for the struct
+// [RecordListResponseOpenpgpkey]
+type recordListResponseOpenpgpkeyJSON struct {
+	Content     apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *RecordListResponseOpenpgpkey) UnmarshalJSON(data []byte) (err error) {
 	return apijson.UnmarshalRoot(data, r)
 }
 
-func (r recordListResponseJSON) RawJSON() string {
+func (r recordListResponseOpenpgpkeyJSON) RawJSON() string {
 	return r.raw
 }
 
+func (r RecordListResponseOpenpgpkey) implementsDNSRecordListResponse() {}
+
+// Record type.
+type RecordListResponseOpenpgpkeyType string
+
+const (
+	RecordListResponseOpenpgpkeyTypeOpenpgpkey RecordListResponseOpenpgpkeyType = "OPENPGPKEY"
+)
+
+func (r RecordListResponseOpenpgpkeyType) IsKnown() bool {
+	switch r {
+	case RecordListResponseOpenpgpkeyTypeOpenpgpkey:
+		return true
+	}
+	return false
+}
+
+// Record type.
+type RecordListResponseType string
+
+const (
+	RecordListResponseTypeA          RecordListResponseType = "A"
+	RecordListResponseTypeAAAA       RecordListResponseType = "AAAA"
+	RecordListResponseTypeCAA        RecordListResponseType = "CAA"
+	RecordListResponseTypeCERT       RecordListResponseType = "CERT"
+	RecordListResponseTypeCNAME      RecordListResponseType = "CNAME"
+	RecordListResponseTypeDNSKEY     RecordListResponseType = "DNSKEY"
+	RecordListResponseTypeDS         RecordListResponseType = "DS"
+	RecordListResponseTypeHTTPS      RecordListResponseType = "HTTPS"
+	RecordListResponseTypeLOC        RecordListResponseType = "LOC"
+	RecordListResponseTypeMX         RecordListResponseType = "MX"
+	RecordListResponseTypeNAPTR      RecordListResponseType = "NAPTR"
+	RecordListResponseTypeNS         RecordListResponseType = "NS"
+	RecordListResponseTypeOpenpgpkey RecordListResponseType = "OPENPGPKEY"
+	RecordListResponseTypePTR        RecordListResponseType = "PTR"
+	RecordListResponseTypeSMIMEA     RecordListResponseType = "SMIMEA"
+	RecordListResponseTypeSRV        RecordListResponseType = "SRV"
+	RecordListResponseTypeSSHFP      RecordListResponseType = "SSHFP"
+	RecordListResponseTypeSVCB       RecordListResponseType = "SVCB"
+	RecordListResponseTypeTLSA       RecordListResponseType = "TLSA"
+	RecordListResponseTypeTXT        RecordListResponseType = "TXT"
+	RecordListResponseTypeURI        RecordListResponseType = "URI"
+)
+
+func (r RecordListResponseType) IsKnown() bool {
+	switch r {
+	case RecordListResponseTypeA, RecordListResponseTypeAAAA, RecordListResponseTypeCAA, RecordListResponseTypeCERT, RecordListResponseTypeCNAME, RecordListResponseTypeDNSKEY, RecordListResponseTypeDS, RecordListResponseTypeHTTPS, RecordListResponseTypeLOC, RecordListResponseTypeMX, RecordListResponseTypeNAPTR, RecordListResponseTypeNS, RecordListResponseTypeOpenpgpkey, RecordListResponseTypePTR, RecordListResponseTypeSMIMEA, RecordListResponseTypeSRV, RecordListResponseTypeSSHFP, RecordListResponseTypeSVCB, RecordListResponseTypeTLSA, RecordListResponseTypeTXT, RecordListResponseTypeURI:
+		return true
+	}
+	return false
+}
+
 type RecordDeleteResponse struct {
 	// Identifier
 	ID   string                   `json:"id"`
@@ -1426,377 +3400,1541 @@ func (r recordBatchResponseJSON) RawJSON() string {
 }
 
 type RecordBatchResponseDelete struct {
-	// Identifier
-	ID string `json:"id,required"`
-	// Comments or notes about the DNS record. This field has no effect on DNS
-	// responses.
-	Comment string `json:"comment,required"`
-	// When the record was created.
-	CreatedOn time.Time `json:"created_on,required" format:"date-time"`
-	// Extra Cloudflare-specific information about the record.
-	Meta interface{} `json:"meta,required"`
-	// When the record was last modified.
-	ModifiedOn time.Time `json:"modified_on,required" format:"date-time"`
-	// DNS record name (or @ for the zone apex) in Punycode.
-	Name string `json:"name,required"`
-	// Whether the record can be proxied by Cloudflare or not.
-	Proxiable bool `json:"proxiable,required"`
-	// Whether the record is receiving the performance and security benefits of
-	// Cloudflare.
-	Proxied bool `json:"proxied,required"`
-	// Settings for the DNS record.
+	// A valid IPv4 address.
+	Content string `json:"content" format:"ipv4"`
+	// Record type.
+	Type RecordBatchResponseDeletesType `json:"type"`
+	// This field can have the runtime type of [CAARecordData], [CERTRecordData],
+	// [DNSKEYRecordData], [DSRecordData], [HTTPSRecordData], [LOCRecordData],
+	// [NAPTRRecordData], [SMIMEARecordData], [SRVRecordData], [SSHFPRecordData],
+	// [SVCBRecordData], [TLSARecordData], [URIRecordData].
+	Data interface{} `json:"data,required"`
+	// This field can have the runtime type of [CNAMERecordSettings].
 	Settings interface{} `json:"settings,required"`
-	// Custom tags for the DNS record. This field has no effect on DNS responses.
-	Tags []RecordTags `json:"tags,required"`
-	// Time To Live (TTL) of the DNS record in seconds. Setting to 1 means 'automatic'.
-	// Value must be between 60 and 86400, with the minimum reduced to 30 for
-	// Enterprise zones.
-	TTL TTL `json:"ttl,required"`
-	// When the record comment was last modified. Omitted if there is no comment.
-	CommentModifiedOn time.Time `json:"comment_modified_on" format:"date-time"`
-	// When the record tags were last modified. Omitted if there are no tags.
-	TagsModifiedOn time.Time                     `json:"tags_modified_on" format:"date-time"`
-	JSON           recordBatchResponseDeleteJSON `json:"-"`
+	// Required for MX, SRV and URI records; unused by other record types. Records with
+	// lower priorities are preferred.
+	Priority float64                       `json:"priority"`
+	JSON     recordBatchResponseDeleteJSON `json:"-"`
+	union    RecordBatchResponseDeletesUnion
 }
 
 // recordBatchResponseDeleteJSON contains the JSON metadata for the struct
 // [RecordBatchResponseDelete]
 type recordBatchResponseDeleteJSON struct {
-	ID                apijson.Field
-	Comment           apijson.Field
-	CreatedOn         apijson.Field
-	Meta              apijson.Field
-	ModifiedOn        apijson.Field
-	Name              apijson.Field
-	Proxiable         apijson.Field
-	Proxied           apijson.Field
-	Settings          apijson.Field
-	Tags              apijson.Field
-	TTL               apijson.Field
-	CommentModifiedOn apijson.Field
-	TagsModifiedOn    apijson.Field
-	raw               string
-	ExtraFields       map[string]apijson.Field
+	Content     apijson.Field
+	Type        apijson.Field
+	Data        apijson.Field
+	Settings    apijson.Field
+	Priority    apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r recordBatchResponseDeleteJSON) RawJSON() string {
+	return r.raw
 }
 
 func (r *RecordBatchResponseDelete) UnmarshalJSON(data []byte) (err error) {
+	*r = RecordBatchResponseDelete{}
+	err = apijson.UnmarshalRoot(data, &r.union)
+	if err != nil {
+		return err
+	}
+	return apijson.Port(r.union, &r)
+}
+
+// AsUnion returns a [RecordBatchResponseDeletesUnion] interface which you can cast
+// to the specific types for more type safety.
+//
+// Possible runtime types of the union are [dns.ARecord], [dns.AAAARecord],
+// [dns.CAARecord], [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord],
+// [dns.DSRecord], [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord],
+// [dns.NAPTRRecord], [dns.NSRecord], [dns.RecordBatchResponseDeletesOpenpgpkey],
+// [dns.PTRRecord], [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord],
+// [dns.SVCBRecord], [dns.TLSARecord], [dns.TXTRecord], [dns.URIRecord].
+func (r RecordBatchResponseDelete) AsUnion() RecordBatchResponseDeletesUnion {
+	return r.union
+}
+
+// Union satisfied by [dns.ARecord], [dns.AAAARecord], [dns.CAARecord],
+// [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord], [dns.DSRecord],
+// [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord], [dns.NAPTRRecord],
+// [dns.NSRecord], [dns.RecordBatchResponseDeletesOpenpgpkey], [dns.PTRRecord],
+// [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord], [dns.SVCBRecord],
+// [dns.TLSARecord], [dns.TXTRecord] or [dns.URIRecord].
+type RecordBatchResponseDeletesUnion interface {
+	implementsDNSRecordBatchResponseDelete()
+}
+
+func init() {
+	apijson.RegisterUnion(
+		reflect.TypeOf((*RecordBatchResponseDeletesUnion)(nil)).Elem(),
+		"type",
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(ARecord{}),
+			DiscriminatorValue: "A",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(AAAARecord{}),
+			DiscriminatorValue: "AAAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CAARecord{}),
+			DiscriminatorValue: "CAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CERTRecord{}),
+			DiscriminatorValue: "CERT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CNAMERecord{}),
+			DiscriminatorValue: "CNAME",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DNSKEYRecord{}),
+			DiscriminatorValue: "DNSKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DSRecord{}),
+			DiscriminatorValue: "DS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(HTTPSRecord{}),
+			DiscriminatorValue: "HTTPS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(LOCRecord{}),
+			DiscriminatorValue: "LOC",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(MXRecord{}),
+			DiscriminatorValue: "MX",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NAPTRRecord{}),
+			DiscriminatorValue: "NAPTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NSRecord{}),
+			DiscriminatorValue: "NS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(RecordBatchResponseDeletesOpenpgpkey{}),
+			DiscriminatorValue: "OPENPGPKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(PTRRecord{}),
+			DiscriminatorValue: "PTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SMIMEARecord{}),
+			DiscriminatorValue: "SMIMEA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SRVRecord{}),
+			DiscriminatorValue: "SRV",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SSHFPRecord{}),
+			DiscriminatorValue: "SSHFP",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SVCBRecord{}),
+			DiscriminatorValue: "SVCB",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TLSARecord{}),
+			DiscriminatorValue: "TLSA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TXTRecord{}),
+			DiscriminatorValue: "TXT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(URIRecord{}),
+			DiscriminatorValue: "URI",
+		},
+	)
+}
+
+type RecordBatchResponseDeletesOpenpgpkey struct {
+	// A single Base64-encoded OpenPGP Transferable Public Key (RFC 4880 Section 11.1)
+	Content string `json:"content"`
+	// Record type.
+	Type RecordBatchResponseDeletesOpenpgpkeyType `json:"type"`
+	JSON recordBatchResponseDeletesOpenpgpkeyJSON `json:"-"`
+}
+
+// recordBatchResponseDeletesOpenpgpkeyJSON contains the JSON metadata for the
+// struct [RecordBatchResponseDeletesOpenpgpkey]
+type recordBatchResponseDeletesOpenpgpkeyJSON struct {
+	Content     apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *RecordBatchResponseDeletesOpenpgpkey) UnmarshalJSON(data []byte) (err error) {
 	return apijson.UnmarshalRoot(data, r)
 }
 
-func (r recordBatchResponseDeleteJSON) RawJSON() string {
+func (r recordBatchResponseDeletesOpenpgpkeyJSON) RawJSON() string {
 	return r.raw
 }
 
+func (r RecordBatchResponseDeletesOpenpgpkey) implementsDNSRecordBatchResponseDelete() {}
+
+// Record type.
+type RecordBatchResponseDeletesOpenpgpkeyType string
+
+const (
+	RecordBatchResponseDeletesOpenpgpkeyTypeOpenpgpkey RecordBatchResponseDeletesOpenpgpkeyType = "OPENPGPKEY"
+)
+
+func (r RecordBatchResponseDeletesOpenpgpkeyType) IsKnown() bool {
+	switch r {
+	case RecordBatchResponseDeletesOpenpgpkeyTypeOpenpgpkey:
+		return true
+	}
+	return false
+}
+
+// Record type.
+type RecordBatchResponseDeletesType string
+
+const (
+	RecordBatchResponseDeletesTypeA          RecordBatchResponseDeletesType = "A"
+	RecordBatchResponseDeletesTypeAAAA       RecordBatchResponseDeletesType = "AAAA"
+	RecordBatchResponseDeletesTypeCAA        RecordBatchResponseDeletesType = "CAA"
+	RecordBatchResponseDeletesTypeCERT       RecordBatchResponseDeletesType = "CERT"
+	RecordBatchResponseDeletesTypeCNAME      RecordBatchResponseDeletesType = "CNAME"
+	RecordBatchResponseDeletesTypeDNSKEY     RecordBatchResponseDeletesType = "DNSKEY"
+	RecordBatchResponseDeletesTypeDS         RecordBatchResponseDeletesType = "DS"
+	RecordBatchResponseDeletesTypeHTTPS      RecordBatchResponseDeletesType = "HTTPS"
+	RecordBatchResponseDeletesTypeLOC        RecordBatchResponseDeletesType = "LOC"
+	RecordBatchResponseDeletesTypeMX         RecordBatchResponseDeletesType = "MX"
+	RecordBatchResponseDeletesTypeNAPTR      RecordBatchResponseDeletesType = "NAPTR"
+	RecordBatchResponseDeletesTypeNS         RecordBatchResponseDeletesType = "NS"
+	RecordBatchResponseDeletesTypeOpenpgpkey RecordBatchResponseDeletesType = "OPENPGPKEY"
+	RecordBatchResponseDeletesTypePTR        RecordBatchResponseDeletesType = "PTR"
+	RecordBatchResponseDeletesTypeSMIMEA     RecordBatchResponseDeletesType = "SMIMEA"
+	RecordBatchResponseDeletesTypeSRV        RecordBatchResponseDeletesType = "SRV"
+	RecordBatchResponseDeletesTypeSSHFP      RecordBatchResponseDeletesType = "SSHFP"
+	RecordBatchResponseDeletesTypeSVCB       RecordBatchResponseDeletesType = "SVCB"
+	RecordBatchResponseDeletesTypeTLSA       RecordBatchResponseDeletesType = "TLSA"
+	RecordBatchResponseDeletesTypeTXT        RecordBatchResponseDeletesType = "TXT"
+	RecordBatchResponseDeletesTypeURI        RecordBatchResponseDeletesType = "URI"
+)
+
+func (r RecordBatchResponseDeletesType) IsKnown() bool {
+	switch r {
+	case RecordBatchResponseDeletesTypeA, RecordBatchResponseDeletesTypeAAAA, RecordBatchResponseDeletesTypeCAA, RecordBatchResponseDeletesTypeCERT, RecordBatchResponseDeletesTypeCNAME, RecordBatchResponseDeletesTypeDNSKEY, RecordBatchResponseDeletesTypeDS, RecordBatchResponseDeletesTypeHTTPS, RecordBatchResponseDeletesTypeLOC, RecordBatchResponseDeletesTypeMX, RecordBatchResponseDeletesTypeNAPTR, RecordBatchResponseDeletesTypeNS, RecordBatchResponseDeletesTypeOpenpgpkey, RecordBatchResponseDeletesTypePTR, RecordBatchResponseDeletesTypeSMIMEA, RecordBatchResponseDeletesTypeSRV, RecordBatchResponseDeletesTypeSSHFP, RecordBatchResponseDeletesTypeSVCB, RecordBatchResponseDeletesTypeTLSA, RecordBatchResponseDeletesTypeTXT, RecordBatchResponseDeletesTypeURI:
+		return true
+	}
+	return false
+}
+
 type RecordBatchResponsePatch struct {
-	// Identifier
-	ID string `json:"id,required"`
-	// Comments or notes about the DNS record. This field has no effect on DNS
-	// responses.
-	Comment string `json:"comment,required"`
-	// When the record was created.
-	CreatedOn time.Time `json:"created_on,required" format:"date-time"`
-	// Extra Cloudflare-specific information about the record.
-	Meta interface{} `json:"meta,required"`
-	// When the record was last modified.
-	ModifiedOn time.Time `json:"modified_on,required" format:"date-time"`
-	// DNS record name (or @ for the zone apex) in Punycode.
-	Name string `json:"name,required"`
-	// Whether the record can be proxied by Cloudflare or not.
-	Proxiable bool `json:"proxiable,required"`
-	// Whether the record is receiving the performance and security benefits of
-	// Cloudflare.
-	Proxied bool `json:"proxied,required"`
-	// Settings for the DNS record.
+	// A valid IPv4 address.
+	Content string `json:"content" format:"ipv4"`
+	// Record type.
+	Type RecordBatchResponsePatchesType `json:"type"`
+	// This field can have the runtime type of [CAARecordData], [CERTRecordData],
+	// [DNSKEYRecordData], [DSRecordData], [HTTPSRecordData], [LOCRecordData],
+	// [NAPTRRecordData], [SMIMEARecordData], [SRVRecordData], [SSHFPRecordData],
+	// [SVCBRecordData], [TLSARecordData], [URIRecordData].
+	Data interface{} `json:"data,required"`
+	// This field can have the runtime type of [CNAMERecordSettings].
 	Settings interface{} `json:"settings,required"`
-	// Custom tags for the DNS record. This field has no effect on DNS responses.
-	Tags []RecordTags `json:"tags,required"`
-	// Time To Live (TTL) of the DNS record in seconds. Setting to 1 means 'automatic'.
-	// Value must be between 60 and 86400, with the minimum reduced to 30 for
-	// Enterprise zones.
-	TTL TTL `json:"ttl,required"`
-	// When the record comment was last modified. Omitted if there is no comment.
-	CommentModifiedOn time.Time `json:"comment_modified_on" format:"date-time"`
-	// When the record tags were last modified. Omitted if there are no tags.
-	TagsModifiedOn time.Time                    `json:"tags_modified_on" format:"date-time"`
-	JSON           recordBatchResponsePatchJSON `json:"-"`
+	// Required for MX, SRV and URI records; unused by other record types. Records with
+	// lower priorities are preferred.
+	Priority float64                      `json:"priority"`
+	JSON     recordBatchResponsePatchJSON `json:"-"`
+	union    RecordBatchResponsePatchesUnion
 }
 
 // recordBatchResponsePatchJSON contains the JSON metadata for the struct
 // [RecordBatchResponsePatch]
 type recordBatchResponsePatchJSON struct {
-	ID                apijson.Field
-	Comment           apijson.Field
-	CreatedOn         apijson.Field
-	Meta              apijson.Field
-	ModifiedOn        apijson.Field
-	Name              apijson.Field
-	Proxiable         apijson.Field
-	Proxied           apijson.Field
-	Settings          apijson.Field
-	Tags              apijson.Field
-	TTL               apijson.Field
-	CommentModifiedOn apijson.Field
-	TagsModifiedOn    apijson.Field
-	raw               string
-	ExtraFields       map[string]apijson.Field
+	Content     apijson.Field
+	Type        apijson.Field
+	Data        apijson.Field
+	Settings    apijson.Field
+	Priority    apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r recordBatchResponsePatchJSON) RawJSON() string {
+	return r.raw
 }
 
 func (r *RecordBatchResponsePatch) UnmarshalJSON(data []byte) (err error) {
+	*r = RecordBatchResponsePatch{}
+	err = apijson.UnmarshalRoot(data, &r.union)
+	if err != nil {
+		return err
+	}
+	return apijson.Port(r.union, &r)
+}
+
+// AsUnion returns a [RecordBatchResponsePatchesUnion] interface which you can cast
+// to the specific types for more type safety.
+//
+// Possible runtime types of the union are [dns.ARecord], [dns.AAAARecord],
+// [dns.CAARecord], [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord],
+// [dns.DSRecord], [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord],
+// [dns.NAPTRRecord], [dns.NSRecord], [dns.RecordBatchResponsePatchesOpenpgpkey],
+// [dns.PTRRecord], [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord],
+// [dns.SVCBRecord], [dns.TLSARecord], [dns.TXTRecord], [dns.URIRecord].
+func (r RecordBatchResponsePatch) AsUnion() RecordBatchResponsePatchesUnion {
+	return r.union
+}
+
+// Union satisfied by [dns.ARecord], [dns.AAAARecord], [dns.CAARecord],
+// [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord], [dns.DSRecord],
+// [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord], [dns.NAPTRRecord],
+// [dns.NSRecord], [dns.RecordBatchResponsePatchesOpenpgpkey], [dns.PTRRecord],
+// [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord], [dns.SVCBRecord],
+// [dns.TLSARecord], [dns.TXTRecord] or [dns.URIRecord].
+type RecordBatchResponsePatchesUnion interface {
+	implementsDNSRecordBatchResponsePatch()
+}
+
+func init() {
+	apijson.RegisterUnion(
+		reflect.TypeOf((*RecordBatchResponsePatchesUnion)(nil)).Elem(),
+		"type",
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(ARecord{}),
+			DiscriminatorValue: "A",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(AAAARecord{}),
+			DiscriminatorValue: "AAAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CAARecord{}),
+			DiscriminatorValue: "CAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CERTRecord{}),
+			DiscriminatorValue: "CERT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CNAMERecord{}),
+			DiscriminatorValue: "CNAME",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DNSKEYRecord{}),
+			DiscriminatorValue: "DNSKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DSRecord{}),
+			DiscriminatorValue: "DS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(HTTPSRecord{}),
+			DiscriminatorValue: "HTTPS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(LOCRecord{}),
+			DiscriminatorValue: "LOC",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(MXRecord{}),
+			DiscriminatorValue: "MX",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NAPTRRecord{}),
+			DiscriminatorValue: "NAPTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NSRecord{}),
+			DiscriminatorValue: "NS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(RecordBatchResponsePatchesOpenpgpkey{}),
+			DiscriminatorValue: "OPENPGPKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(PTRRecord{}),
+			DiscriminatorValue: "PTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SMIMEARecord{}),
+			DiscriminatorValue: "SMIMEA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SRVRecord{}),
+			DiscriminatorValue: "SRV",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SSHFPRecord{}),
+			DiscriminatorValue: "SSHFP",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SVCBRecord{}),
+			DiscriminatorValue: "SVCB",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TLSARecord{}),
+			DiscriminatorValue: "TLSA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TXTRecord{}),
+			DiscriminatorValue: "TXT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(URIRecord{}),
+			DiscriminatorValue: "URI",
+		},
+	)
+}
+
+type RecordBatchResponsePatchesOpenpgpkey struct {
+	// A single Base64-encoded OpenPGP Transferable Public Key (RFC 4880 Section 11.1)
+	Content string `json:"content"`
+	// Record type.
+	Type RecordBatchResponsePatchesOpenpgpkeyType `json:"type"`
+	JSON recordBatchResponsePatchesOpenpgpkeyJSON `json:"-"`
+}
+
+// recordBatchResponsePatchesOpenpgpkeyJSON contains the JSON metadata for the
+// struct [RecordBatchResponsePatchesOpenpgpkey]
+type recordBatchResponsePatchesOpenpgpkeyJSON struct {
+	Content     apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *RecordBatchResponsePatchesOpenpgpkey) UnmarshalJSON(data []byte) (err error) {
 	return apijson.UnmarshalRoot(data, r)
 }
 
-func (r recordBatchResponsePatchJSON) RawJSON() string {
+func (r recordBatchResponsePatchesOpenpgpkeyJSON) RawJSON() string {
 	return r.raw
 }
 
+func (r RecordBatchResponsePatchesOpenpgpkey) implementsDNSRecordBatchResponsePatch() {}
+
+// Record type.
+type RecordBatchResponsePatchesOpenpgpkeyType string
+
+const (
+	RecordBatchResponsePatchesOpenpgpkeyTypeOpenpgpkey RecordBatchResponsePatchesOpenpgpkeyType = "OPENPGPKEY"
+)
+
+func (r RecordBatchResponsePatchesOpenpgpkeyType) IsKnown() bool {
+	switch r {
+	case RecordBatchResponsePatchesOpenpgpkeyTypeOpenpgpkey:
+		return true
+	}
+	return false
+}
+
+// Record type.
+type RecordBatchResponsePatchesType string
+
+const (
+	RecordBatchResponsePatchesTypeA          RecordBatchResponsePatchesType = "A"
+	RecordBatchResponsePatchesTypeAAAA       RecordBatchResponsePatchesType = "AAAA"
+	RecordBatchResponsePatchesTypeCAA        RecordBatchResponsePatchesType = "CAA"
+	RecordBatchResponsePatchesTypeCERT       RecordBatchResponsePatchesType = "CERT"
+	RecordBatchResponsePatchesTypeCNAME      RecordBatchResponsePatchesType = "CNAME"
+	RecordBatchResponsePatchesTypeDNSKEY     RecordBatchResponsePatchesType = "DNSKEY"
+	RecordBatchResponsePatchesTypeDS         RecordBatchResponsePatchesType = "DS"
+	RecordBatchResponsePatchesTypeHTTPS      RecordBatchResponsePatchesType = "HTTPS"
+	RecordBatchResponsePatchesTypeLOC        RecordBatchResponsePatchesType = "LOC"
+	RecordBatchResponsePatchesTypeMX         RecordBatchResponsePatchesType = "MX"
+	RecordBatchResponsePatchesTypeNAPTR      RecordBatchResponsePatchesType = "NAPTR"
+	RecordBatchResponsePatchesTypeNS         RecordBatchResponsePatchesType = "NS"
+	RecordBatchResponsePatchesTypeOpenpgpkey RecordBatchResponsePatchesType = "OPENPGPKEY"
+	RecordBatchResponsePatchesTypePTR        RecordBatchResponsePatchesType = "PTR"
+	RecordBatchResponsePatchesTypeSMIMEA     RecordBatchResponsePatchesType = "SMIMEA"
+	RecordBatchResponsePatchesTypeSRV        RecordBatchResponsePatchesType = "SRV"
+	RecordBatchResponsePatchesTypeSSHFP      RecordBatchResponsePatchesType = "SSHFP"
+	RecordBatchResponsePatchesTypeSVCB       RecordBatchResponsePatchesType = "SVCB"
+	RecordBatchResponsePatchesTypeTLSA       RecordBatchResponsePatchesType = "TLSA"
+	RecordBatchResponsePatchesTypeTXT        RecordBatchResponsePatchesType = "TXT"
+	RecordBatchResponsePatchesTypeURI        RecordBatchResponsePatchesType = "URI"
+)
+
+func (r RecordBatchResponsePatchesType) IsKnown() bool {
+	switch r {
+	case RecordBatchResponsePatchesTypeA, RecordBatchResponsePatchesTypeAAAA, RecordBatchResponsePatchesTypeCAA, RecordBatchResponsePatchesTypeCERT, RecordBatchResponsePatchesTypeCNAME, RecordBatchResponsePatchesTypeDNSKEY, RecordBatchResponsePatchesTypeDS, RecordBatchResponsePatchesTypeHTTPS, RecordBatchResponsePatchesTypeLOC, RecordBatchResponsePatchesTypeMX, RecordBatchResponsePatchesTypeNAPTR, RecordBatchResponsePatchesTypeNS, RecordBatchResponsePatchesTypeOpenpgpkey, RecordBatchResponsePatchesTypePTR, RecordBatchResponsePatchesTypeSMIMEA, RecordBatchResponsePatchesTypeSRV, RecordBatchResponsePatchesTypeSSHFP, RecordBatchResponsePatchesTypeSVCB, RecordBatchResponsePatchesTypeTLSA, RecordBatchResponsePatchesTypeTXT, RecordBatchResponsePatchesTypeURI:
+		return true
+	}
+	return false
+}
+
 type RecordBatchResponsePost struct {
-	// Identifier
-	ID string `json:"id,required"`
-	// Comments or notes about the DNS record. This field has no effect on DNS
-	// responses.
-	Comment string `json:"comment,required"`
-	// When the record was created.
-	CreatedOn time.Time `json:"created_on,required" format:"date-time"`
-	// Extra Cloudflare-specific information about the record.
-	Meta interface{} `json:"meta,required"`
-	// When the record was last modified.
-	ModifiedOn time.Time `json:"modified_on,required" format:"date-time"`
-	// DNS record name (or @ for the zone apex) in Punycode.
-	Name string `json:"name,required"`
-	// Whether the record can be proxied by Cloudflare or not.
-	Proxiable bool `json:"proxiable,required"`
-	// Whether the record is receiving the performance and security benefits of
-	// Cloudflare.
-	Proxied bool `json:"proxied,required"`
-	// Settings for the DNS record.
+	// A valid IPv4 address.
+	Content string `json:"content" format:"ipv4"`
+	// Record type.
+	Type RecordBatchResponsePostsType `json:"type"`
+	// This field can have the runtime type of [CAARecordData], [CERTRecordData],
+	// [DNSKEYRecordData], [DSRecordData], [HTTPSRecordData], [LOCRecordData],
+	// [NAPTRRecordData], [SMIMEARecordData], [SRVRecordData], [SSHFPRecordData],
+	// [SVCBRecordData], [TLSARecordData], [URIRecordData].
+	Data interface{} `json:"data,required"`
+	// This field can have the runtime type of [CNAMERecordSettings].
 	Settings interface{} `json:"settings,required"`
-	// Custom tags for the DNS record. This field has no effect on DNS responses.
-	Tags []RecordTags `json:"tags,required"`
-	// Time To Live (TTL) of the DNS record in seconds. Setting to 1 means 'automatic'.
-	// Value must be between 60 and 86400, with the minimum reduced to 30 for
-	// Enterprise zones.
-	TTL TTL `json:"ttl,required"`
-	// When the record comment was last modified. Omitted if there is no comment.
-	CommentModifiedOn time.Time `json:"comment_modified_on" format:"date-time"`
-	// When the record tags were last modified. Omitted if there are no tags.
-	TagsModifiedOn time.Time                   `json:"tags_modified_on" format:"date-time"`
-	JSON           recordBatchResponsePostJSON `json:"-"`
+	// Required for MX, SRV and URI records; unused by other record types. Records with
+	// lower priorities are preferred.
+	Priority float64                     `json:"priority"`
+	JSON     recordBatchResponsePostJSON `json:"-"`
+	union    RecordBatchResponsePostsUnion
 }
 
 // recordBatchResponsePostJSON contains the JSON metadata for the struct
 // [RecordBatchResponsePost]
 type recordBatchResponsePostJSON struct {
-	ID                apijson.Field
-	Comment           apijson.Field
-	CreatedOn         apijson.Field
-	Meta              apijson.Field
-	ModifiedOn        apijson.Field
-	Name              apijson.Field
-	Proxiable         apijson.Field
-	Proxied           apijson.Field
-	Settings          apijson.Field
-	Tags              apijson.Field
-	TTL               apijson.Field
-	CommentModifiedOn apijson.Field
-	TagsModifiedOn    apijson.Field
-	raw               string
-	ExtraFields       map[string]apijson.Field
+	Content     apijson.Field
+	Type        apijson.Field
+	Data        apijson.Field
+	Settings    apijson.Field
+	Priority    apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r recordBatchResponsePostJSON) RawJSON() string {
+	return r.raw
 }
 
 func (r *RecordBatchResponsePost) UnmarshalJSON(data []byte) (err error) {
+	*r = RecordBatchResponsePost{}
+	err = apijson.UnmarshalRoot(data, &r.union)
+	if err != nil {
+		return err
+	}
+	return apijson.Port(r.union, &r)
+}
+
+// AsUnion returns a [RecordBatchResponsePostsUnion] interface which you can cast
+// to the specific types for more type safety.
+//
+// Possible runtime types of the union are [dns.ARecord], [dns.AAAARecord],
+// [dns.CAARecord], [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord],
+// [dns.DSRecord], [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord],
+// [dns.NAPTRRecord], [dns.NSRecord], [dns.RecordBatchResponsePostsOpenpgpkey],
+// [dns.PTRRecord], [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord],
+// [dns.SVCBRecord], [dns.TLSARecord], [dns.TXTRecord], [dns.URIRecord].
+func (r RecordBatchResponsePost) AsUnion() RecordBatchResponsePostsUnion {
+	return r.union
+}
+
+// Union satisfied by [dns.ARecord], [dns.AAAARecord], [dns.CAARecord],
+// [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord], [dns.DSRecord],
+// [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord], [dns.NAPTRRecord],
+// [dns.NSRecord], [dns.RecordBatchResponsePostsOpenpgpkey], [dns.PTRRecord],
+// [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord], [dns.SVCBRecord],
+// [dns.TLSARecord], [dns.TXTRecord] or [dns.URIRecord].
+type RecordBatchResponsePostsUnion interface {
+	implementsDNSRecordBatchResponsePost()
+}
+
+func init() {
+	apijson.RegisterUnion(
+		reflect.TypeOf((*RecordBatchResponsePostsUnion)(nil)).Elem(),
+		"type",
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(ARecord{}),
+			DiscriminatorValue: "A",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(AAAARecord{}),
+			DiscriminatorValue: "AAAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CAARecord{}),
+			DiscriminatorValue: "CAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CERTRecord{}),
+			DiscriminatorValue: "CERT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CNAMERecord{}),
+			DiscriminatorValue: "CNAME",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DNSKEYRecord{}),
+			DiscriminatorValue: "DNSKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DSRecord{}),
+			DiscriminatorValue: "DS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(HTTPSRecord{}),
+			DiscriminatorValue: "HTTPS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(LOCRecord{}),
+			DiscriminatorValue: "LOC",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(MXRecord{}),
+			DiscriminatorValue: "MX",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NAPTRRecord{}),
+			DiscriminatorValue: "NAPTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NSRecord{}),
+			DiscriminatorValue: "NS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(RecordBatchResponsePostsOpenpgpkey{}),
+			DiscriminatorValue: "OPENPGPKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(PTRRecord{}),
+			DiscriminatorValue: "PTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SMIMEARecord{}),
+			DiscriminatorValue: "SMIMEA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SRVRecord{}),
+			DiscriminatorValue: "SRV",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SSHFPRecord{}),
+			DiscriminatorValue: "SSHFP",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SVCBRecord{}),
+			DiscriminatorValue: "SVCB",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TLSARecord{}),
+			DiscriminatorValue: "TLSA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TXTRecord{}),
+			DiscriminatorValue: "TXT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(URIRecord{}),
+			DiscriminatorValue: "URI",
+		},
+	)
+}
+
+type RecordBatchResponsePostsOpenpgpkey struct {
+	// A single Base64-encoded OpenPGP Transferable Public Key (RFC 4880 Section 11.1)
+	Content string `json:"content"`
+	// Record type.
+	Type RecordBatchResponsePostsOpenpgpkeyType `json:"type"`
+	JSON recordBatchResponsePostsOpenpgpkeyJSON `json:"-"`
+}
+
+// recordBatchResponsePostsOpenpgpkeyJSON contains the JSON metadata for the struct
+// [RecordBatchResponsePostsOpenpgpkey]
+type recordBatchResponsePostsOpenpgpkeyJSON struct {
+	Content     apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *RecordBatchResponsePostsOpenpgpkey) UnmarshalJSON(data []byte) (err error) {
 	return apijson.UnmarshalRoot(data, r)
 }
 
-func (r recordBatchResponsePostJSON) RawJSON() string {
+func (r recordBatchResponsePostsOpenpgpkeyJSON) RawJSON() string {
 	return r.raw
 }
 
+func (r RecordBatchResponsePostsOpenpgpkey) implementsDNSRecordBatchResponsePost() {}
+
+// Record type.
+type RecordBatchResponsePostsOpenpgpkeyType string
+
+const (
+	RecordBatchResponsePostsOpenpgpkeyTypeOpenpgpkey RecordBatchResponsePostsOpenpgpkeyType = "OPENPGPKEY"
+)
+
+func (r RecordBatchResponsePostsOpenpgpkeyType) IsKnown() bool {
+	switch r {
+	case RecordBatchResponsePostsOpenpgpkeyTypeOpenpgpkey:
+		return true
+	}
+	return false
+}
+
+// Record type.
+type RecordBatchResponsePostsType string
+
+const (
+	RecordBatchResponsePostsTypeA          RecordBatchResponsePostsType = "A"
+	RecordBatchResponsePostsTypeAAAA       RecordBatchResponsePostsType = "AAAA"
+	RecordBatchResponsePostsTypeCAA        RecordBatchResponsePostsType = "CAA"
+	RecordBatchResponsePostsTypeCERT       RecordBatchResponsePostsType = "CERT"
+	RecordBatchResponsePostsTypeCNAME      RecordBatchResponsePostsType = "CNAME"
+	RecordBatchResponsePostsTypeDNSKEY     RecordBatchResponsePostsType = "DNSKEY"
+	RecordBatchResponsePostsTypeDS         RecordBatchResponsePostsType = "DS"
+	RecordBatchResponsePostsTypeHTTPS      RecordBatchResponsePostsType = "HTTPS"
+	RecordBatchResponsePostsTypeLOC        RecordBatchResponsePostsType = "LOC"
+	RecordBatchResponsePostsTypeMX         RecordBatchResponsePostsType = "MX"
+	RecordBatchResponsePostsTypeNAPTR      RecordBatchResponsePostsType = "NAPTR"
+	RecordBatchResponsePostsTypeNS         RecordBatchResponsePostsType = "NS"
+	RecordBatchResponsePostsTypeOpenpgpkey RecordBatchResponsePostsType = "OPENPGPKEY"
+	RecordBatchResponsePostsTypePTR        RecordBatchResponsePostsType = "PTR"
+	RecordBatchResponsePostsTypeSMIMEA     RecordBatchResponsePostsType = "SMIMEA"
+	RecordBatchResponsePostsTypeSRV        RecordBatchResponsePostsType = "SRV"
+	RecordBatchResponsePostsTypeSSHFP      RecordBatchResponsePostsType = "SSHFP"
+	RecordBatchResponsePostsTypeSVCB       RecordBatchResponsePostsType = "SVCB"
+	RecordBatchResponsePostsTypeTLSA       RecordBatchResponsePostsType = "TLSA"
+	RecordBatchResponsePostsTypeTXT        RecordBatchResponsePostsType = "TXT"
+	RecordBatchResponsePostsTypeURI        RecordBatchResponsePostsType = "URI"
+)
+
+func (r RecordBatchResponsePostsType) IsKnown() bool {
+	switch r {
+	case RecordBatchResponsePostsTypeA, RecordBatchResponsePostsTypeAAAA, RecordBatchResponsePostsTypeCAA, RecordBatchResponsePostsTypeCERT, RecordBatchResponsePostsTypeCNAME, RecordBatchResponsePostsTypeDNSKEY, RecordBatchResponsePostsTypeDS, RecordBatchResponsePostsTypeHTTPS, RecordBatchResponsePostsTypeLOC, RecordBatchResponsePostsTypeMX, RecordBatchResponsePostsTypeNAPTR, RecordBatchResponsePostsTypeNS, RecordBatchResponsePostsTypeOpenpgpkey, RecordBatchResponsePostsTypePTR, RecordBatchResponsePostsTypeSMIMEA, RecordBatchResponsePostsTypeSRV, RecordBatchResponsePostsTypeSSHFP, RecordBatchResponsePostsTypeSVCB, RecordBatchResponsePostsTypeTLSA, RecordBatchResponsePostsTypeTXT, RecordBatchResponsePostsTypeURI:
+		return true
+	}
+	return false
+}
+
 type RecordBatchResponsePut struct {
-	// Identifier
-	ID string `json:"id,required"`
-	// Comments or notes about the DNS record. This field has no effect on DNS
-	// responses.
-	Comment string `json:"comment,required"`
-	// When the record was created.
-	CreatedOn time.Time `json:"created_on,required" format:"date-time"`
-	// Extra Cloudflare-specific information about the record.
-	Meta interface{} `json:"meta,required"`
-	// When the record was last modified.
-	ModifiedOn time.Time `json:"modified_on,required" format:"date-time"`
-	// DNS record name (or @ for the zone apex) in Punycode.
-	Name string `json:"name,required"`
-	// Whether the record can be proxied by Cloudflare or not.
-	Proxiable bool `json:"proxiable,required"`
-	// Whether the record is receiving the performance and security benefits of
-	// Cloudflare.
-	Proxied bool `json:"proxied,required"`
-	// Settings for the DNS record.
+	// A valid IPv4 address.
+	Content string `json:"content" format:"ipv4"`
+	// Record type.
+	Type RecordBatchResponsePutsType `json:"type"`
+	// This field can have the runtime type of [CAARecordData], [CERTRecordData],
+	// [DNSKEYRecordData], [DSRecordData], [HTTPSRecordData], [LOCRecordData],
+	// [NAPTRRecordData], [SMIMEARecordData], [SRVRecordData], [SSHFPRecordData],
+	// [SVCBRecordData], [TLSARecordData], [URIRecordData].
+	Data interface{} `json:"data,required"`
+	// This field can have the runtime type of [CNAMERecordSettings].
 	Settings interface{} `json:"settings,required"`
-	// Custom tags for the DNS record. This field has no effect on DNS responses.
-	Tags []RecordTags `json:"tags,required"`
-	// Time To Live (TTL) of the DNS record in seconds. Setting to 1 means 'automatic'.
-	// Value must be between 60 and 86400, with the minimum reduced to 30 for
-	// Enterprise zones.
-	TTL TTL `json:"ttl,required"`
-	// When the record comment was last modified. Omitted if there is no comment.
-	CommentModifiedOn time.Time `json:"comment_modified_on" format:"date-time"`
-	// When the record tags were last modified. Omitted if there are no tags.
-	TagsModifiedOn time.Time                  `json:"tags_modified_on" format:"date-time"`
-	JSON           recordBatchResponsePutJSON `json:"-"`
+	// Required for MX, SRV and URI records; unused by other record types. Records with
+	// lower priorities are preferred.
+	Priority float64                    `json:"priority"`
+	JSON     recordBatchResponsePutJSON `json:"-"`
+	union    RecordBatchResponsePutsUnion
 }
 
 // recordBatchResponsePutJSON contains the JSON metadata for the struct
 // [RecordBatchResponsePut]
 type recordBatchResponsePutJSON struct {
-	ID                apijson.Field
-	Comment           apijson.Field
-	CreatedOn         apijson.Field
-	Meta              apijson.Field
-	ModifiedOn        apijson.Field
-	Name              apijson.Field
-	Proxiable         apijson.Field
-	Proxied           apijson.Field
-	Settings          apijson.Field
-	Tags              apijson.Field
-	TTL               apijson.Field
-	CommentModifiedOn apijson.Field
-	TagsModifiedOn    apijson.Field
-	raw               string
-	ExtraFields       map[string]apijson.Field
+	Content     apijson.Field
+	Type        apijson.Field
+	Data        apijson.Field
+	Settings    apijson.Field
+	Priority    apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r recordBatchResponsePutJSON) RawJSON() string {
+	return r.raw
 }
 
 func (r *RecordBatchResponsePut) UnmarshalJSON(data []byte) (err error) {
+	*r = RecordBatchResponsePut{}
+	err = apijson.UnmarshalRoot(data, &r.union)
+	if err != nil {
+		return err
+	}
+	return apijson.Port(r.union, &r)
+}
+
+// AsUnion returns a [RecordBatchResponsePutsUnion] interface which you can cast to
+// the specific types for more type safety.
+//
+// Possible runtime types of the union are [dns.ARecord], [dns.AAAARecord],
+// [dns.CAARecord], [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord],
+// [dns.DSRecord], [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord],
+// [dns.NAPTRRecord], [dns.NSRecord], [dns.RecordBatchResponsePutsOpenpgpkey],
+// [dns.PTRRecord], [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord],
+// [dns.SVCBRecord], [dns.TLSARecord], [dns.TXTRecord], [dns.URIRecord].
+func (r RecordBatchResponsePut) AsUnion() RecordBatchResponsePutsUnion {
+	return r.union
+}
+
+// Union satisfied by [dns.ARecord], [dns.AAAARecord], [dns.CAARecord],
+// [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord], [dns.DSRecord],
+// [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord], [dns.NAPTRRecord],
+// [dns.NSRecord], [dns.RecordBatchResponsePutsOpenpgpkey], [dns.PTRRecord],
+// [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord], [dns.SVCBRecord],
+// [dns.TLSARecord], [dns.TXTRecord] or [dns.URIRecord].
+type RecordBatchResponsePutsUnion interface {
+	implementsDNSRecordBatchResponsePut()
+}
+
+func init() {
+	apijson.RegisterUnion(
+		reflect.TypeOf((*RecordBatchResponsePutsUnion)(nil)).Elem(),
+		"type",
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(ARecord{}),
+			DiscriminatorValue: "A",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(AAAARecord{}),
+			DiscriminatorValue: "AAAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CAARecord{}),
+			DiscriminatorValue: "CAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CERTRecord{}),
+			DiscriminatorValue: "CERT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CNAMERecord{}),
+			DiscriminatorValue: "CNAME",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DNSKEYRecord{}),
+			DiscriminatorValue: "DNSKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DSRecord{}),
+			DiscriminatorValue: "DS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(HTTPSRecord{}),
+			DiscriminatorValue: "HTTPS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(LOCRecord{}),
+			DiscriminatorValue: "LOC",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(MXRecord{}),
+			DiscriminatorValue: "MX",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NAPTRRecord{}),
+			DiscriminatorValue: "NAPTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NSRecord{}),
+			DiscriminatorValue: "NS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(RecordBatchResponsePutsOpenpgpkey{}),
+			DiscriminatorValue: "OPENPGPKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(PTRRecord{}),
+			DiscriminatorValue: "PTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SMIMEARecord{}),
+			DiscriminatorValue: "SMIMEA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SRVRecord{}),
+			DiscriminatorValue: "SRV",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SSHFPRecord{}),
+			DiscriminatorValue: "SSHFP",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SVCBRecord{}),
+			DiscriminatorValue: "SVCB",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TLSARecord{}),
+			DiscriminatorValue: "TLSA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TXTRecord{}),
+			DiscriminatorValue: "TXT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(URIRecord{}),
+			DiscriminatorValue: "URI",
+		},
+	)
+}
+
+type RecordBatchResponsePutsOpenpgpkey struct {
+	// A single Base64-encoded OpenPGP Transferable Public Key (RFC 4880 Section 11.1)
+	Content string `json:"content"`
+	// Record type.
+	Type RecordBatchResponsePutsOpenpgpkeyType `json:"type"`
+	JSON recordBatchResponsePutsOpenpgpkeyJSON `json:"-"`
+}
+
+// recordBatchResponsePutsOpenpgpkeyJSON contains the JSON metadata for the struct
+// [RecordBatchResponsePutsOpenpgpkey]
+type recordBatchResponsePutsOpenpgpkeyJSON struct {
+	Content     apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *RecordBatchResponsePutsOpenpgpkey) UnmarshalJSON(data []byte) (err error) {
 	return apijson.UnmarshalRoot(data, r)
 }
 
-func (r recordBatchResponsePutJSON) RawJSON() string {
+func (r recordBatchResponsePutsOpenpgpkeyJSON) RawJSON() string {
 	return r.raw
 }
 
+func (r RecordBatchResponsePutsOpenpgpkey) implementsDNSRecordBatchResponsePut() {}
+
+// Record type.
+type RecordBatchResponsePutsOpenpgpkeyType string
+
+const (
+	RecordBatchResponsePutsOpenpgpkeyTypeOpenpgpkey RecordBatchResponsePutsOpenpgpkeyType = "OPENPGPKEY"
+)
+
+func (r RecordBatchResponsePutsOpenpgpkeyType) IsKnown() bool {
+	switch r {
+	case RecordBatchResponsePutsOpenpgpkeyTypeOpenpgpkey:
+		return true
+	}
+	return false
+}
+
+// Record type.
+type RecordBatchResponsePutsType string
+
+const (
+	RecordBatchResponsePutsTypeA          RecordBatchResponsePutsType = "A"
+	RecordBatchResponsePutsTypeAAAA       RecordBatchResponsePutsType = "AAAA"
+	RecordBatchResponsePutsTypeCAA        RecordBatchResponsePutsType = "CAA"
+	RecordBatchResponsePutsTypeCERT       RecordBatchResponsePutsType = "CERT"
+	RecordBatchResponsePutsTypeCNAME      RecordBatchResponsePutsType = "CNAME"
+	RecordBatchResponsePutsTypeDNSKEY     RecordBatchResponsePutsType = "DNSKEY"
+	RecordBatchResponsePutsTypeDS         RecordBatchResponsePutsType = "DS"
+	RecordBatchResponsePutsTypeHTTPS      RecordBatchResponsePutsType = "HTTPS"
+	RecordBatchResponsePutsTypeLOC        RecordBatchResponsePutsType = "LOC"
+	RecordBatchResponsePutsTypeMX         RecordBatchResponsePutsType = "MX"
+	RecordBatchResponsePutsTypeNAPTR      RecordBatchResponsePutsType = "NAPTR"
+	RecordBatchResponsePutsTypeNS         RecordBatchResponsePutsType = "NS"
+	RecordBatchResponsePutsTypeOpenpgpkey RecordBatchResponsePutsType = "OPENPGPKEY"
+	RecordBatchResponsePutsTypePTR        RecordBatchResponsePutsType = "PTR"
+	RecordBatchResponsePutsTypeSMIMEA     RecordBatchResponsePutsType = "SMIMEA"
+	RecordBatchResponsePutsTypeSRV        RecordBatchResponsePutsType = "SRV"
+	RecordBatchResponsePutsTypeSSHFP      RecordBatchResponsePutsType = "SSHFP"
+	RecordBatchResponsePutsTypeSVCB       RecordBatchResponsePutsType = "SVCB"
+	RecordBatchResponsePutsTypeTLSA       RecordBatchResponsePutsType = "TLSA"
+	RecordBatchResponsePutsTypeTXT        RecordBatchResponsePutsType = "TXT"
+	RecordBatchResponsePutsTypeURI        RecordBatchResponsePutsType = "URI"
+)
+
+func (r RecordBatchResponsePutsType) IsKnown() bool {
+	switch r {
+	case RecordBatchResponsePutsTypeA, RecordBatchResponsePutsTypeAAAA, RecordBatchResponsePutsTypeCAA, RecordBatchResponsePutsTypeCERT, RecordBatchResponsePutsTypeCNAME, RecordBatchResponsePutsTypeDNSKEY, RecordBatchResponsePutsTypeDS, RecordBatchResponsePutsTypeHTTPS, RecordBatchResponsePutsTypeLOC, RecordBatchResponsePutsTypeMX, RecordBatchResponsePutsTypeNAPTR, RecordBatchResponsePutsTypeNS, RecordBatchResponsePutsTypeOpenpgpkey, RecordBatchResponsePutsTypePTR, RecordBatchResponsePutsTypeSMIMEA, RecordBatchResponsePutsTypeSRV, RecordBatchResponsePutsTypeSSHFP, RecordBatchResponsePutsTypeSVCB, RecordBatchResponsePutsTypeTLSA, RecordBatchResponsePutsTypeTXT, RecordBatchResponsePutsTypeURI:
+		return true
+	}
+	return false
+}
+
 type RecordEditResponse struct {
-	// Identifier
-	ID string `json:"id,required"`
-	// Comments or notes about the DNS record. This field has no effect on DNS
-	// responses.
-	Comment string `json:"comment,required"`
-	// When the record was created.
-	CreatedOn time.Time `json:"created_on,required" format:"date-time"`
-	// Extra Cloudflare-specific information about the record.
-	Meta interface{} `json:"meta,required"`
-	// When the record was last modified.
-	ModifiedOn time.Time `json:"modified_on,required" format:"date-time"`
-	// DNS record name (or @ for the zone apex) in Punycode.
-	Name string `json:"name,required"`
-	// Whether the record can be proxied by Cloudflare or not.
-	Proxiable bool `json:"proxiable,required"`
-	// Whether the record is receiving the performance and security benefits of
-	// Cloudflare.
-	Proxied bool `json:"proxied,required"`
-	// Settings for the DNS record.
+	// A valid IPv4 address.
+	Content string `json:"content" format:"ipv4"`
+	// Record type.
+	Type RecordEditResponseType `json:"type"`
+	// This field can have the runtime type of [CAARecordData], [CERTRecordData],
+	// [DNSKEYRecordData], [DSRecordData], [HTTPSRecordData], [LOCRecordData],
+	// [NAPTRRecordData], [SMIMEARecordData], [SRVRecordData], [SSHFPRecordData],
+	// [SVCBRecordData], [TLSARecordData], [URIRecordData].
+	Data interface{} `json:"data,required"`
+	// This field can have the runtime type of [CNAMERecordSettings].
 	Settings interface{} `json:"settings,required"`
-	// Custom tags for the DNS record. This field has no effect on DNS responses.
-	Tags []RecordTags `json:"tags,required"`
-	// Time To Live (TTL) of the DNS record in seconds. Setting to 1 means 'automatic'.
-	// Value must be between 60 and 86400, with the minimum reduced to 30 for
-	// Enterprise zones.
-	TTL TTL `json:"ttl,required"`
-	// When the record comment was last modified. Omitted if there is no comment.
-	CommentModifiedOn time.Time `json:"comment_modified_on" format:"date-time"`
-	// When the record tags were last modified. Omitted if there are no tags.
-	TagsModifiedOn time.Time              `json:"tags_modified_on" format:"date-time"`
-	JSON           recordEditResponseJSON `json:"-"`
+	// Required for MX, SRV and URI records; unused by other record types. Records with
+	// lower priorities are preferred.
+	Priority float64                `json:"priority"`
+	JSON     recordEditResponseJSON `json:"-"`
+	union    RecordEditResponseUnion
 }
 
 // recordEditResponseJSON contains the JSON metadata for the struct
 // [RecordEditResponse]
 type recordEditResponseJSON struct {
-	ID                apijson.Field
-	Comment           apijson.Field
-	CreatedOn         apijson.Field
-	Meta              apijson.Field
-	ModifiedOn        apijson.Field
-	Name              apijson.Field
-	Proxiable         apijson.Field
-	Proxied           apijson.Field
-	Settings          apijson.Field
-	Tags              apijson.Field
-	TTL               apijson.Field
-	CommentModifiedOn apijson.Field
-	TagsModifiedOn    apijson.Field
-	raw               string
-	ExtraFields       map[string]apijson.Field
+	Content     apijson.Field
+	Type        apijson.Field
+	Data        apijson.Field
+	Settings    apijson.Field
+	Priority    apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r recordEditResponseJSON) RawJSON() string {
+	return r.raw
 }
 
 func (r *RecordEditResponse) UnmarshalJSON(data []byte) (err error) {
+	*r = RecordEditResponse{}
+	err = apijson.UnmarshalRoot(data, &r.union)
+	if err != nil {
+		return err
+	}
+	return apijson.Port(r.union, &r)
+}
+
+// AsUnion returns a [RecordEditResponseUnion] interface which you can cast to the
+// specific types for more type safety.
+//
+// Possible runtime types of the union are [dns.ARecord], [dns.AAAARecord],
+// [dns.CAARecord], [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord],
+// [dns.DSRecord], [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord],
+// [dns.NAPTRRecord], [dns.NSRecord], [dns.RecordEditResponseOpenpgpkey],
+// [dns.PTRRecord], [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord],
+// [dns.SVCBRecord], [dns.TLSARecord], [dns.TXTRecord], [dns.URIRecord].
+func (r RecordEditResponse) AsUnion() RecordEditResponseUnion {
+	return r.union
+}
+
+// Union satisfied by [dns.ARecord], [dns.AAAARecord], [dns.CAARecord],
+// [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord], [dns.DSRecord],
+// [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord], [dns.NAPTRRecord],
+// [dns.NSRecord], [dns.RecordEditResponseOpenpgpkey], [dns.PTRRecord],
+// [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord], [dns.SVCBRecord],
+// [dns.TLSARecord], [dns.TXTRecord] or [dns.URIRecord].
+type RecordEditResponseUnion interface {
+	implementsDNSRecordEditResponse()
+}
+
+func init() {
+	apijson.RegisterUnion(
+		reflect.TypeOf((*RecordEditResponseUnion)(nil)).Elem(),
+		"type",
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(ARecord{}),
+			DiscriminatorValue: "A",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(AAAARecord{}),
+			DiscriminatorValue: "AAAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CAARecord{}),
+			DiscriminatorValue: "CAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CERTRecord{}),
+			DiscriminatorValue: "CERT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CNAMERecord{}),
+			DiscriminatorValue: "CNAME",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DNSKEYRecord{}),
+			DiscriminatorValue: "DNSKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DSRecord{}),
+			DiscriminatorValue: "DS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(HTTPSRecord{}),
+			DiscriminatorValue: "HTTPS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(LOCRecord{}),
+			DiscriminatorValue: "LOC",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(MXRecord{}),
+			DiscriminatorValue: "MX",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NAPTRRecord{}),
+			DiscriminatorValue: "NAPTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NSRecord{}),
+			DiscriminatorValue: "NS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(RecordEditResponseOpenpgpkey{}),
+			DiscriminatorValue: "OPENPGPKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(PTRRecord{}),
+			DiscriminatorValue: "PTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SMIMEARecord{}),
+			DiscriminatorValue: "SMIMEA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SRVRecord{}),
+			DiscriminatorValue: "SRV",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SSHFPRecord{}),
+			DiscriminatorValue: "SSHFP",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SVCBRecord{}),
+			DiscriminatorValue: "SVCB",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TLSARecord{}),
+			DiscriminatorValue: "TLSA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TXTRecord{}),
+			DiscriminatorValue: "TXT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(URIRecord{}),
+			DiscriminatorValue: "URI",
+		},
+	)
+}
+
+type RecordEditResponseOpenpgpkey struct {
+	// A single Base64-encoded OpenPGP Transferable Public Key (RFC 4880 Section 11.1)
+	Content string `json:"content"`
+	// Record type.
+	Type RecordEditResponseOpenpgpkeyType `json:"type"`
+	JSON recordEditResponseOpenpgpkeyJSON `json:"-"`
+}
+
+// recordEditResponseOpenpgpkeyJSON contains the JSON metadata for the struct
+// [RecordEditResponseOpenpgpkey]
+type recordEditResponseOpenpgpkeyJSON struct {
+	Content     apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *RecordEditResponseOpenpgpkey) UnmarshalJSON(data []byte) (err error) {
 	return apijson.UnmarshalRoot(data, r)
 }
 
-func (r recordEditResponseJSON) RawJSON() string {
+func (r recordEditResponseOpenpgpkeyJSON) RawJSON() string {
 	return r.raw
 }
 
+func (r RecordEditResponseOpenpgpkey) implementsDNSRecordEditResponse() {}
+
+// Record type.
+type RecordEditResponseOpenpgpkeyType string
+
+const (
+	RecordEditResponseOpenpgpkeyTypeOpenpgpkey RecordEditResponseOpenpgpkeyType = "OPENPGPKEY"
+)
+
+func (r RecordEditResponseOpenpgpkeyType) IsKnown() bool {
+	switch r {
+	case RecordEditResponseOpenpgpkeyTypeOpenpgpkey:
+		return true
+	}
+	return false
+}
+
+// Record type.
+type RecordEditResponseType string
+
+const (
+	RecordEditResponseTypeA          RecordEditResponseType = "A"
+	RecordEditResponseTypeAAAA       RecordEditResponseType = "AAAA"
+	RecordEditResponseTypeCAA        RecordEditResponseType = "CAA"
+	RecordEditResponseTypeCERT       RecordEditResponseType = "CERT"
+	RecordEditResponseTypeCNAME      RecordEditResponseType = "CNAME"
+	RecordEditResponseTypeDNSKEY     RecordEditResponseType = "DNSKEY"
+	RecordEditResponseTypeDS         RecordEditResponseType = "DS"
+	RecordEditResponseTypeHTTPS      RecordEditResponseType = "HTTPS"
+	RecordEditResponseTypeLOC        RecordEditResponseType = "LOC"
+	RecordEditResponseTypeMX         RecordEditResponseType = "MX"
+	RecordEditResponseTypeNAPTR      RecordEditResponseType = "NAPTR"
+	RecordEditResponseTypeNS         RecordEditResponseType = "NS"
+	RecordEditResponseTypeOpenpgpkey RecordEditResponseType = "OPENPGPKEY"
+	RecordEditResponseTypePTR        RecordEditResponseType = "PTR"
+	RecordEditResponseTypeSMIMEA     RecordEditResponseType = "SMIMEA"
+	RecordEditResponseTypeSRV        RecordEditResponseType = "SRV"
+	RecordEditResponseTypeSSHFP      RecordEditResponseType = "SSHFP"
+	RecordEditResponseTypeSVCB       RecordEditResponseType = "SVCB"
+	RecordEditResponseTypeTLSA       RecordEditResponseType = "TLSA"
+	RecordEditResponseTypeTXT        RecordEditResponseType = "TXT"
+	RecordEditResponseTypeURI        RecordEditResponseType = "URI"
+)
+
+func (r RecordEditResponseType) IsKnown() bool {
+	switch r {
+	case RecordEditResponseTypeA, RecordEditResponseTypeAAAA, RecordEditResponseTypeCAA, RecordEditResponseTypeCERT, RecordEditResponseTypeCNAME, RecordEditResponseTypeDNSKEY, RecordEditResponseTypeDS, RecordEditResponseTypeHTTPS, RecordEditResponseTypeLOC, RecordEditResponseTypeMX, RecordEditResponseTypeNAPTR, RecordEditResponseTypeNS, RecordEditResponseTypeOpenpgpkey, RecordEditResponseTypePTR, RecordEditResponseTypeSMIMEA, RecordEditResponseTypeSRV, RecordEditResponseTypeSSHFP, RecordEditResponseTypeSVCB, RecordEditResponseTypeTLSA, RecordEditResponseTypeTXT, RecordEditResponseTypeURI:
+		return true
+	}
+	return false
+}
+
 type RecordGetResponse struct {
-	// Identifier
-	ID string `json:"id,required"`
-	// Comments or notes about the DNS record. This field has no effect on DNS
-	// responses.
-	Comment string `json:"comment,required"`
-	// When the record was created.
-	CreatedOn time.Time `json:"created_on,required" format:"date-time"`
-	// Extra Cloudflare-specific information about the record.
-	Meta interface{} `json:"meta,required"`
-	// When the record was last modified.
-	ModifiedOn time.Time `json:"modified_on,required" format:"date-time"`
-	// DNS record name (or @ for the zone apex) in Punycode.
-	Name string `json:"name,required"`
-	// Whether the record can be proxied by Cloudflare or not.
-	Proxiable bool `json:"proxiable,required"`
-	// Whether the record is receiving the performance and security benefits of
-	// Cloudflare.
-	Proxied bool `json:"proxied,required"`
-	// Settings for the DNS record.
+	// A valid IPv4 address.
+	Content string `json:"content" format:"ipv4"`
+	// Record type.
+	Type RecordGetResponseType `json:"type"`
+	// This field can have the runtime type of [CAARecordData], [CERTRecordData],
+	// [DNSKEYRecordData], [DSRecordData], [HTTPSRecordData], [LOCRecordData],
+	// [NAPTRRecordData], [SMIMEARecordData], [SRVRecordData], [SSHFPRecordData],
+	// [SVCBRecordData], [TLSARecordData], [URIRecordData].
+	Data interface{} `json:"data,required"`
+	// This field can have the runtime type of [CNAMERecordSettings].
 	Settings interface{} `json:"settings,required"`
-	// Custom tags for the DNS record. This field has no effect on DNS responses.
-	Tags []RecordTags `json:"tags,required"`
-	// Time To Live (TTL) of the DNS record in seconds. Setting to 1 means 'automatic'.
-	// Value must be between 60 and 86400, with the minimum reduced to 30 for
-	// Enterprise zones.
-	TTL TTL `json:"ttl,required"`
-	// When the record comment was last modified. Omitted if there is no comment.
-	CommentModifiedOn time.Time `json:"comment_modified_on" format:"date-time"`
-	// When the record tags were last modified. Omitted if there are no tags.
-	TagsModifiedOn time.Time             `json:"tags_modified_on" format:"date-time"`
-	JSON           recordGetResponseJSON `json:"-"`
+	// Required for MX, SRV and URI records; unused by other record types. Records with
+	// lower priorities are preferred.
+	Priority float64               `json:"priority"`
+	JSON     recordGetResponseJSON `json:"-"`
+	union    RecordGetResponseUnion
 }
 
 // recordGetResponseJSON contains the JSON metadata for the struct
 // [RecordGetResponse]
 type recordGetResponseJSON struct {
-	ID                apijson.Field
-	Comment           apijson.Field
-	CreatedOn         apijson.Field
-	Meta              apijson.Field
-	ModifiedOn        apijson.Field
-	Name              apijson.Field
-	Proxiable         apijson.Field
-	Proxied           apijson.Field
-	Settings          apijson.Field
-	Tags              apijson.Field
-	TTL               apijson.Field
-	CommentModifiedOn apijson.Field
-	TagsModifiedOn    apijson.Field
-	raw               string
-	ExtraFields       map[string]apijson.Field
+	Content     apijson.Field
+	Type        apijson.Field
+	Data        apijson.Field
+	Settings    apijson.Field
+	Priority    apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r recordGetResponseJSON) RawJSON() string {
+	return r.raw
 }
 
 func (r *RecordGetResponse) UnmarshalJSON(data []byte) (err error) {
+	*r = RecordGetResponse{}
+	err = apijson.UnmarshalRoot(data, &r.union)
+	if err != nil {
+		return err
+	}
+	return apijson.Port(r.union, &r)
+}
+
+// AsUnion returns a [RecordGetResponseUnion] interface which you can cast to the
+// specific types for more type safety.
+//
+// Possible runtime types of the union are [dns.ARecord], [dns.AAAARecord],
+// [dns.CAARecord], [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord],
+// [dns.DSRecord], [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord],
+// [dns.NAPTRRecord], [dns.NSRecord], [dns.RecordGetResponseOpenpgpkey],
+// [dns.PTRRecord], [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord],
+// [dns.SVCBRecord], [dns.TLSARecord], [dns.TXTRecord], [dns.URIRecord].
+func (r RecordGetResponse) AsUnion() RecordGetResponseUnion {
+	return r.union
+}
+
+// Union satisfied by [dns.ARecord], [dns.AAAARecord], [dns.CAARecord],
+// [dns.CERTRecord], [dns.CNAMERecord], [dns.DNSKEYRecord], [dns.DSRecord],
+// [dns.HTTPSRecord], [dns.LOCRecord], [dns.MXRecord], [dns.NAPTRRecord],
+// [dns.NSRecord], [dns.RecordGetResponseOpenpgpkey], [dns.PTRRecord],
+// [dns.SMIMEARecord], [dns.SRVRecord], [dns.SSHFPRecord], [dns.SVCBRecord],
+// [dns.TLSARecord], [dns.TXTRecord] or [dns.URIRecord].
+type RecordGetResponseUnion interface {
+	implementsDNSRecordGetResponse()
+}
+
+func init() {
+	apijson.RegisterUnion(
+		reflect.TypeOf((*RecordGetResponseUnion)(nil)).Elem(),
+		"type",
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(ARecord{}),
+			DiscriminatorValue: "A",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(AAAARecord{}),
+			DiscriminatorValue: "AAAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CAARecord{}),
+			DiscriminatorValue: "CAA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CERTRecord{}),
+			DiscriminatorValue: "CERT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(CNAMERecord{}),
+			DiscriminatorValue: "CNAME",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DNSKEYRecord{}),
+			DiscriminatorValue: "DNSKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(DSRecord{}),
+			DiscriminatorValue: "DS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(HTTPSRecord{}),
+			DiscriminatorValue: "HTTPS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(LOCRecord{}),
+			DiscriminatorValue: "LOC",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(MXRecord{}),
+			DiscriminatorValue: "MX",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NAPTRRecord{}),
+			DiscriminatorValue: "NAPTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(NSRecord{}),
+			DiscriminatorValue: "NS",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(RecordGetResponseOpenpgpkey{}),
+			DiscriminatorValue: "OPENPGPKEY",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(PTRRecord{}),
+			DiscriminatorValue: "PTR",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SMIMEARecord{}),
+			DiscriminatorValue: "SMIMEA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SRVRecord{}),
+			DiscriminatorValue: "SRV",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SSHFPRecord{}),
+			DiscriminatorValue: "SSHFP",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(SVCBRecord{}),
+			DiscriminatorValue: "SVCB",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TLSARecord{}),
+			DiscriminatorValue: "TLSA",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(TXTRecord{}),
+			DiscriminatorValue: "TXT",
+		},
+		apijson.UnionVariant{
+			TypeFilter:         gjson.JSON,
+			Type:               reflect.TypeOf(URIRecord{}),
+			DiscriminatorValue: "URI",
+		},
+	)
+}
+
+type RecordGetResponseOpenpgpkey struct {
+	// A single Base64-encoded OpenPGP Transferable Public Key (RFC 4880 Section 11.1)
+	Content string `json:"content"`
+	// Record type.
+	Type RecordGetResponseOpenpgpkeyType `json:"type"`
+	JSON recordGetResponseOpenpgpkeyJSON `json:"-"`
+}
+
+// recordGetResponseOpenpgpkeyJSON contains the JSON metadata for the struct
+// [RecordGetResponseOpenpgpkey]
+type recordGetResponseOpenpgpkeyJSON struct {
+	Content     apijson.Field
+	Type        apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *RecordGetResponseOpenpgpkey) UnmarshalJSON(data []byte) (err error) {
 	return apijson.UnmarshalRoot(data, r)
 }
 
-func (r recordGetResponseJSON) RawJSON() string {
+func (r recordGetResponseOpenpgpkeyJSON) RawJSON() string {
 	return r.raw
 }
 
+func (r RecordGetResponseOpenpgpkey) implementsDNSRecordGetResponse() {}
+
+// Record type.
+type RecordGetResponseOpenpgpkeyType string
+
+const (
+	RecordGetResponseOpenpgpkeyTypeOpenpgpkey RecordGetResponseOpenpgpkeyType = "OPENPGPKEY"
+)
+
+func (r RecordGetResponseOpenpgpkeyType) IsKnown() bool {
+	switch r {
+	case RecordGetResponseOpenpgpkeyTypeOpenpgpkey:
+		return true
+	}
+	return false
+}
+
+// Record type.
+type RecordGetResponseType string
+
+const (
+	RecordGetResponseTypeA          RecordGetResponseType = "A"
+	RecordGetResponseTypeAAAA       RecordGetResponseType = "AAAA"
+	RecordGetResponseTypeCAA        RecordGetResponseType = "CAA"
+	RecordGetResponseTypeCERT       RecordGetResponseType = "CERT"
+	RecordGetResponseTypeCNAME      RecordGetResponseType = "CNAME"
+	RecordGetResponseTypeDNSKEY     RecordGetResponseType = "DNSKEY"
+	RecordGetResponseTypeDS         RecordGetResponseType = "DS"
+	RecordGetResponseTypeHTTPS      RecordGetResponseType = "HTTPS"
+	RecordGetResponseTypeLOC        RecordGetResponseType = "LOC"
+	RecordGetResponseTypeMX         RecordGetResponseType = "MX"
+	RecordGetResponseTypeNAPTR      RecordGetResponseType = "NAPTR"
+	RecordGetResponseTypeNS         RecordGetResponseType = "NS"
+	RecordGetResponseTypeOpenpgpkey RecordGetResponseType = "OPENPGPKEY"
+	RecordGetResponseTypePTR        RecordGetResponseType = "PTR"
+	RecordGetResponseTypeSMIMEA     RecordGetResponseType = "SMIMEA"
+	RecordGetResponseTypeSRV        RecordGetResponseType = "SRV"
+	RecordGetResponseTypeSSHFP      RecordGetResponseType = "SSHFP"
+	RecordGetResponseTypeSVCB       RecordGetResponseType = "SVCB"
+	RecordGetResponseTypeTLSA       RecordGetResponseType = "TLSA"
+	RecordGetResponseTypeTXT        RecordGetResponseType = "TXT"
+	RecordGetResponseTypeURI        RecordGetResponseType = "URI"
+)
+
+func (r RecordGetResponseType) IsKnown() bool {
+	switch r {
+	case RecordGetResponseTypeA, RecordGetResponseTypeAAAA, RecordGetResponseTypeCAA, RecordGetResponseTypeCERT, RecordGetResponseTypeCNAME, RecordGetResponseTypeDNSKEY, RecordGetResponseTypeDS, RecordGetResponseTypeHTTPS, RecordGetResponseTypeLOC, RecordGetResponseTypeMX, RecordGetResponseTypeNAPTR, RecordGetResponseTypeNS, RecordGetResponseTypeOpenpgpkey, RecordGetResponseTypePTR, RecordGetResponseTypeSMIMEA, RecordGetResponseTypeSRV, RecordGetResponseTypeSSHFP, RecordGetResponseTypeSVCB, RecordGetResponseTypeTLSA, RecordGetResponseTypeTXT, RecordGetResponseTypeURI:
+		return true
+	}
+	return false
+}
+
 type RecordImportResponse struct {
 	// Number of DNS records added.
 	RecsAdded float64 `json:"recs_added"`
@@ -1850,7 +4988,7 @@ func (r recordScanResponseJSON) RawJSON() string {
 type RecordNewParams struct {
 	// Identifier
 	ZoneID param.Field[string] `path:"zone_id,required"`
-	Record RecordParam         `json:"record,required"`
+	Record RecordUnionParam    `json:"record,required"`
 }
 
 func (r RecordNewParams) MarshalJSON() (data []byte, err error) {
@@ -1903,7 +5041,7 @@ func (r RecordNewResponseEnvelopeSuccess) IsKnown() bool {
 type RecordUpdateParams struct {
 	// Identifier
 	ZoneID param.Field[string] `path:"zone_id,required"`
-	Record RecordParam         `json:"record,required"`
+	Record RecordUnionParam    `json:"record,required"`
 }
 
 func (r RecordUpdateParams) MarshalJSON() (data []byte, err error) {
@@ -2218,7 +5356,7 @@ type RecordBatchParams struct {
 	ZoneID  param.Field[string]                    `path:"zone_id,required"`
 	Deletes param.Field[[]RecordBatchParamsDelete] `json:"deletes"`
 	Patches param.Field[[]RecordUnionParam]        `json:"patches"`
-	Posts   param.Field[[]RecordParam]             `json:"posts"`
+	Posts   param.Field[[]RecordUnionParam]        `json:"posts"`
 	Puts    param.Field[[]RecordUnionParam]        `json:"puts"`
 }
 
@@ -2281,7 +5419,7 @@ func (r RecordBatchResponseEnvelopeSuccess) IsKnown() bool {
 type RecordEditParams struct {
 	// Identifier
 	ZoneID param.Field[string] `path:"zone_id,required"`
-	Record RecordParam         `json:"record,required"`
+	Record RecordUnionParam    `json:"record,required"`
 }
 
 func (r RecordEditParams) MarshalJSON() (data []byte, err error) {
diff --git a/rulesets/rule.go b/rulesets/rule.go
index 0f8279e23..74532be7e 100644
--- a/rulesets/rule.go
+++ b/rulesets/rule.go
@@ -423,6 +423,10 @@ func (r BlockRuleParam) implementsRulesetsRulesetUpdateParamsRuleUnion() {}
 
 func (r BlockRuleParam) implementsRulesetsPhaseUpdateParamsRuleUnion() {}
 
+func (r BlockRuleParam) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+func (r BlockRuleParam) implementsRulesetsRuleEditParamsBodyUnion() {}
+
 // The parameters configuring the rule's action.
 type BlockRuleActionParametersParam struct {
 	// The response to show when the block is applied.
@@ -776,6 +780,10 @@ func (r CompressResponseRuleParam) implementsRulesetsRulesetUpdateParamsRuleUnio
 
 func (r CompressResponseRuleParam) implementsRulesetsPhaseUpdateParamsRuleUnion() {}
 
+func (r CompressResponseRuleParam) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+func (r CompressResponseRuleParam) implementsRulesetsRuleEditParamsBodyUnion() {}
+
 // The parameters configuring the rule's action.
 type CompressResponseRuleActionParametersParam struct {
 	// Custom order for compression algorithms.
@@ -1059,6 +1067,10 @@ func (r DDoSDynamicRuleParam) implementsRulesetsRulesetUpdateParamsRuleUnion() {
 
 func (r DDoSDynamicRuleParam) implementsRulesetsPhaseUpdateParamsRuleUnion() {}
 
+func (r DDoSDynamicRuleParam) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+func (r DDoSDynamicRuleParam) implementsRulesetsRuleEditParamsBodyUnion() {}
+
 // Configure checks for exposed credentials.
 type DDoSDynamicRuleExposedCredentialCheckParam struct {
 	// Expression that selects the password used in the credentials check.
@@ -1535,6 +1547,10 @@ func (r ExecuteRuleParam) implementsRulesetsRulesetUpdateParamsRuleUnion() {}
 
 func (r ExecuteRuleParam) implementsRulesetsPhaseUpdateParamsRuleUnion() {}
 
+func (r ExecuteRuleParam) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+func (r ExecuteRuleParam) implementsRulesetsRuleEditParamsBodyUnion() {}
+
 // The parameters configuring the rule's action.
 type ExecuteRuleActionParametersParam struct {
 	// The ID of the ruleset to execute.
@@ -1879,6 +1895,10 @@ func (r ForceConnectionCloseRuleParam) implementsRulesetsRulesetUpdateParamsRule
 
 func (r ForceConnectionCloseRuleParam) implementsRulesetsPhaseUpdateParamsRuleUnion() {}
 
+func (r ForceConnectionCloseRuleParam) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+func (r ForceConnectionCloseRuleParam) implementsRulesetsRuleEditParamsBodyUnion() {}
+
 // Configure checks for exposed credentials.
 type ForceConnectionCloseRuleExposedCredentialCheckParam struct {
 	// Expression that selects the password used in the credentials check.
@@ -2241,6 +2261,10 @@ func (r LogCustomFieldRuleParam) implementsRulesetsRulesetUpdateParamsRuleUnion(
 
 func (r LogCustomFieldRuleParam) implementsRulesetsPhaseUpdateParamsRuleUnion() {}
 
+func (r LogCustomFieldRuleParam) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+func (r LogCustomFieldRuleParam) implementsRulesetsRuleEditParamsBodyUnion() {}
+
 // The parameters configuring the rule's action.
 type LogCustomFieldRuleActionParametersParam struct {
 	// The cookie fields to log.
@@ -2548,6 +2572,10 @@ func (r LogRuleParam) implementsRulesetsRulesetUpdateParamsRuleUnion() {}
 
 func (r LogRuleParam) implementsRulesetsPhaseUpdateParamsRuleUnion() {}
 
+func (r LogRuleParam) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+func (r LogRuleParam) implementsRulesetsRuleEditParamsBodyUnion() {}
+
 // Configure checks for exposed credentials.
 type LogRuleExposedCredentialCheckParam struct {
 	// Expression that selects the password used in the credentials check.
@@ -2844,6 +2872,10 @@ func (r ManagedChallengeRuleParam) implementsRulesetsRulesetUpdateParamsRuleUnio
 
 func (r ManagedChallengeRuleParam) implementsRulesetsPhaseUpdateParamsRuleUnion() {}
 
+func (r ManagedChallengeRuleParam) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+func (r ManagedChallengeRuleParam) implementsRulesetsRuleEditParamsBodyUnion() {}
+
 // Configure checks for exposed credentials.
 type ManagedChallengeRuleExposedCredentialCheckParam struct {
 	// Expression that selects the password used in the credentials check.
@@ -3325,6 +3357,10 @@ func (r RedirectRuleParam) implementsRulesetsRulesetUpdateParamsRuleUnion() {}
 
 func (r RedirectRuleParam) implementsRulesetsPhaseUpdateParamsRuleUnion() {}
 
+func (r RedirectRuleParam) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+func (r RedirectRuleParam) implementsRulesetsRuleEditParamsBodyUnion() {}
+
 // The parameters configuring the rule's action.
 type RedirectRuleActionParametersParam struct {
 	// Serve a redirect based on a bulk list lookup.
@@ -3938,6 +3974,10 @@ func (r RewriteRuleParam) implementsRulesetsRulesetUpdateParamsRuleUnion() {}
 
 func (r RewriteRuleParam) implementsRulesetsPhaseUpdateParamsRuleUnion() {}
 
+func (r RewriteRuleParam) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+func (r RewriteRuleParam) implementsRulesetsRuleEditParamsBodyUnion() {}
+
 // The parameters configuring the rule's action.
 type RewriteRuleActionParametersParam struct {
 	// Map of request headers to modify.
@@ -4518,6 +4558,10 @@ func (r RouteRuleParam) implementsRulesetsRulesetUpdateParamsRuleUnion() {}
 
 func (r RouteRuleParam) implementsRulesetsPhaseUpdateParamsRuleUnion() {}
 
+func (r RouteRuleParam) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+func (r RouteRuleParam) implementsRulesetsRuleEditParamsBodyUnion() {}
+
 // The parameters configuring the rule's action.
 type RouteRuleActionParametersParam struct {
 	// Rewrite the HTTP Host header.
@@ -4841,6 +4885,10 @@ func (r ScoreRuleParam) implementsRulesetsRulesetUpdateParamsRuleUnion() {}
 
 func (r ScoreRuleParam) implementsRulesetsPhaseUpdateParamsRuleUnion() {}
 
+func (r ScoreRuleParam) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+func (r ScoreRuleParam) implementsRulesetsRuleEditParamsBodyUnion() {}
+
 // The parameters configuring the rule's action.
 type ScoreRuleActionParametersParam struct {
 	// Increment contains the delta to change the score and can be either positive or
@@ -5162,6 +5210,10 @@ func (r ServeErrorRuleParam) implementsRulesetsRulesetUpdateParamsRuleUnion() {}
 
 func (r ServeErrorRuleParam) implementsRulesetsPhaseUpdateParamsRuleUnion() {}
 
+func (r ServeErrorRuleParam) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+func (r ServeErrorRuleParam) implementsRulesetsRuleEditParamsBodyUnion() {}
+
 // The parameters configuring the rule's action.
 type ServeErrorRuleActionParametersParam struct {
 	// Error response content.
@@ -5997,6 +6049,10 @@ func (r SetCacheSettingsRuleParam) implementsRulesetsRulesetUpdateParamsRuleUnio
 
 func (r SetCacheSettingsRuleParam) implementsRulesetsPhaseUpdateParamsRuleUnion() {}
 
+func (r SetCacheSettingsRuleParam) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+func (r SetCacheSettingsRuleParam) implementsRulesetsRuleEditParamsBodyUnion() {}
+
 // The parameters configuring the rule's action.
 type SetCacheSettingsRuleActionParametersParam struct {
 	// List of additional ports that caching can be enabled on.
@@ -6734,6 +6790,10 @@ func (r SetConfigRuleParam) implementsRulesetsRulesetUpdateParamsRuleUnion() {}
 
 func (r SetConfigRuleParam) implementsRulesetsPhaseUpdateParamsRuleUnion() {}
 
+func (r SetConfigRuleParam) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+func (r SetConfigRuleParam) implementsRulesetsRuleEditParamsBodyUnion() {}
+
 // The parameters configuring the rule's action.
 type SetConfigRuleActionParametersParam struct {
 	// Turn on or off Automatic HTTPS Rewrites.
@@ -7129,6 +7189,10 @@ func (r SkipRuleParam) implementsRulesetsRulesetUpdateParamsRuleUnion() {}
 
 func (r SkipRuleParam) implementsRulesetsPhaseUpdateParamsRuleUnion() {}
 
+func (r SkipRuleParam) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+func (r SkipRuleParam) implementsRulesetsRuleEditParamsBodyUnion() {}
+
 // The parameters configuring the rule's action.
 type SkipRuleActionParametersParam struct {
 	// A list of phases to skip the execution of. This option is incompatible with the
@@ -9090,82 +9154,298 @@ func (r RuleEditResponseRulesAction) IsKnown() bool {
 }
 
 type RuleNewParams struct {
+	Body RuleNewParamsBodyUnion `json:"body,required"`
 	// The Account ID to use for this endpoint. Mutually exclusive with the Zone ID.
 	AccountID param.Field[string] `path:"account_id"`
 	// The Zone ID to use for this endpoint. Mutually exclusive with the Account ID.
 	ZoneID param.Field[string] `path:"zone_id"`
-	// An object configuring where the rule will be placed.
-	Position param.Field[RuleNewParamsPositionUnion] `json:"position"`
 }
 
 func (r RuleNewParams) MarshalJSON() (data []byte, err error) {
+	return apijson.MarshalRoot(r.Body)
+}
+
+type RuleNewParamsBody struct {
+	// The action to perform when the rule matches.
+	Action           param.Field[RuleNewParamsBodyAction] `json:"action"`
+	ActionParameters param.Field[interface{}]             `json:"action_parameters,required"`
+	Categories       param.Field[interface{}]             `json:"categories,required"`
+	// An informative description of the rule.
+	Description param.Field[string] `json:"description"`
+	// Whether the rule should be executed.
+	Enabled                param.Field[bool]        `json:"enabled"`
+	ExposedCredentialCheck param.Field[interface{}] `json:"exposed_credential_check,required"`
+	// The expression defining which traffic will match the rule.
+	Expression param.Field[string] `json:"expression"`
+	// The unique ID of the rule.
+	ID param.Field[string] `json:"id"`
+	// An object configuring the rule's logging behavior.
+	Logging   param.Field[LoggingParam] `json:"logging"`
+	Ratelimit param.Field[interface{}]  `json:"ratelimit,required"`
+	// The reference of the rule (the rule ID by default).
+	Ref param.Field[string] `json:"ref"`
+}
+
+func (r RuleNewParamsBody) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
-// An object configuring where the rule will be placed.
-type RuleNewParamsPosition struct {
-	// The ID of another rule to place the rule before. An empty value causes the rule
-	// to be placed at the top.
-	Before param.Field[string] `json:"before"`
-	// The ID of another rule to place the rule after. An empty value causes the rule
-	// to be placed at the bottom.
-	After param.Field[string] `json:"after"`
-	// An index at which to place the rule, where index 1 is the first rule.
-	Index param.Field[float64] `json:"index"`
+func (r RuleNewParamsBody) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+// Satisfied by [rulesets.BlockRuleParam],
+// [rulesets.RuleNewParamsBodyRulesetsChallengeRule],
+// [rulesets.CompressResponseRuleParam], [rulesets.ExecuteRuleParam],
+// [rulesets.RuleNewParamsBodyRulesetsJSChallengeRule], [rulesets.LogRuleParam],
+// [rulesets.ManagedChallengeRuleParam], [rulesets.RedirectRuleParam],
+// [rulesets.RewriteRuleParam], [rulesets.RouteRuleParam],
+// [rulesets.ScoreRuleParam], [rulesets.ServeErrorRuleParam],
+// [rulesets.SetConfigRuleParam], [rulesets.SkipRuleParam],
+// [rulesets.SetCacheSettingsRuleParam], [rulesets.LogCustomFieldRuleParam],
+// [rulesets.DDoSDynamicRuleParam], [rulesets.ForceConnectionCloseRuleParam],
+// [RuleNewParamsBody].
+type RuleNewParamsBodyUnion interface {
+	implementsRulesetsRuleNewParamsBodyUnion()
 }
 
-func (r RuleNewParamsPosition) MarshalJSON() (data []byte, err error) {
+type RuleNewParamsBodyRulesetsChallengeRule struct {
+	// The unique ID of the rule.
+	ID param.Field[string] `json:"id"`
+	// The action to perform when the rule matches.
+	Action param.Field[RuleNewParamsBodyRulesetsChallengeRuleAction] `json:"action"`
+	// The parameters configuring the rule's action.
+	ActionParameters param.Field[interface{}] `json:"action_parameters"`
+	// An informative description of the rule.
+	Description param.Field[string] `json:"description"`
+	// Whether the rule should be executed.
+	Enabled param.Field[bool] `json:"enabled"`
+	// Configure checks for exposed credentials.
+	ExposedCredentialCheck param.Field[RuleNewParamsBodyRulesetsChallengeRuleExposedCredentialCheck] `json:"exposed_credential_check"`
+	// The expression defining which traffic will match the rule.
+	Expression param.Field[string] `json:"expression"`
+	// An object configuring the rule's logging behavior.
+	Logging param.Field[LoggingParam] `json:"logging"`
+	// An object configuring the rule's ratelimit behavior.
+	Ratelimit param.Field[RuleNewParamsBodyRulesetsChallengeRuleRatelimit] `json:"ratelimit"`
+	// The reference of the rule (the rule ID by default).
+	Ref param.Field[string] `json:"ref"`
+}
+
+func (r RuleNewParamsBodyRulesetsChallengeRule) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
-func (r RuleNewParamsPosition) implementsRulesetsRuleNewParamsPositionUnion() {}
+func (r RuleNewParamsBodyRulesetsChallengeRule) implementsRulesetsRuleNewParamsBodyUnion() {}
 
-// An object configuring where the rule will be placed.
-//
-// Satisfied by [rulesets.RuleNewParamsPositionBeforePosition],
-// [rulesets.RuleNewParamsPositionAfterPosition],
-// [rulesets.RuleNewParamsPositionIndexPosition], [RuleNewParamsPosition].
-type RuleNewParamsPositionUnion interface {
-	implementsRulesetsRuleNewParamsPositionUnion()
+// The action to perform when the rule matches.
+type RuleNewParamsBodyRulesetsChallengeRuleAction string
+
+const (
+	RuleNewParamsBodyRulesetsChallengeRuleActionChallenge RuleNewParamsBodyRulesetsChallengeRuleAction = "challenge"
+)
+
+func (r RuleNewParamsBodyRulesetsChallengeRuleAction) IsKnown() bool {
+	switch r {
+	case RuleNewParamsBodyRulesetsChallengeRuleActionChallenge:
+		return true
+	}
+	return false
 }
 
-// An object configuring where the rule will be placed.
-type RuleNewParamsPositionBeforePosition struct {
-	// The ID of another rule to place the rule before. An empty value causes the rule
-	// to be placed at the top.
-	Before param.Field[string] `json:"before"`
+// Configure checks for exposed credentials.
+type RuleNewParamsBodyRulesetsChallengeRuleExposedCredentialCheck struct {
+	// Expression that selects the password used in the credentials check.
+	PasswordExpression param.Field[string] `json:"password_expression,required"`
+	// Expression that selects the user ID used in the credentials check.
+	UsernameExpression param.Field[string] `json:"username_expression,required"`
+}
+
+func (r RuleNewParamsBodyRulesetsChallengeRuleExposedCredentialCheck) MarshalJSON() (data []byte, err error) {
+	return apijson.MarshalRoot(r)
+}
+
+// An object configuring the rule's ratelimit behavior.
+type RuleNewParamsBodyRulesetsChallengeRuleRatelimit struct {
+	// Characteristics of the request on which the ratelimiter counter will be
+	// incremented.
+	Characteristics param.Field[[]string] `json:"characteristics,required"`
+	// Period in seconds over which the counter is being incremented.
+	Period param.Field[RuleNewParamsBodyRulesetsChallengeRuleRatelimitPeriod] `json:"period,required"`
+	// Defines when the ratelimit counter should be incremented. It is optional and
+	// defaults to the same as the rule's expression.
+	CountingExpression param.Field[string] `json:"counting_expression"`
+	// Period of time in seconds after which the action will be disabled following its
+	// first execution.
+	MitigationTimeout param.Field[int64] `json:"mitigation_timeout"`
+	// The threshold of requests per period after which the action will be executed for
+	// the first time.
+	RequestsPerPeriod param.Field[int64] `json:"requests_per_period"`
+	// Defines if ratelimit counting is only done when an origin is reached.
+	RequestsToOrigin param.Field[bool] `json:"requests_to_origin"`
+	// The score threshold per period for which the action will be executed the first
+	// time.
+	ScorePerPeriod param.Field[int64] `json:"score_per_period"`
+	// The response header name provided by the origin which should contain the score
+	// to increment ratelimit counter on.
+	ScoreResponseHeaderName param.Field[string] `json:"score_response_header_name"`
 }
 
-func (r RuleNewParamsPositionBeforePosition) MarshalJSON() (data []byte, err error) {
+func (r RuleNewParamsBodyRulesetsChallengeRuleRatelimit) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
-func (r RuleNewParamsPositionBeforePosition) implementsRulesetsRuleNewParamsPositionUnion() {}
+// Period in seconds over which the counter is being incremented.
+type RuleNewParamsBodyRulesetsChallengeRuleRatelimitPeriod int64
+
+const (
+	RuleNewParamsBodyRulesetsChallengeRuleRatelimitPeriod10   RuleNewParamsBodyRulesetsChallengeRuleRatelimitPeriod = 10
+	RuleNewParamsBodyRulesetsChallengeRuleRatelimitPeriod60   RuleNewParamsBodyRulesetsChallengeRuleRatelimitPeriod = 60
+	RuleNewParamsBodyRulesetsChallengeRuleRatelimitPeriod600  RuleNewParamsBodyRulesetsChallengeRuleRatelimitPeriod = 600
+	RuleNewParamsBodyRulesetsChallengeRuleRatelimitPeriod3600 RuleNewParamsBodyRulesetsChallengeRuleRatelimitPeriod = 3600
+)
+
+func (r RuleNewParamsBodyRulesetsChallengeRuleRatelimitPeriod) IsKnown() bool {
+	switch r {
+	case RuleNewParamsBodyRulesetsChallengeRuleRatelimitPeriod10, RuleNewParamsBodyRulesetsChallengeRuleRatelimitPeriod60, RuleNewParamsBodyRulesetsChallengeRuleRatelimitPeriod600, RuleNewParamsBodyRulesetsChallengeRuleRatelimitPeriod3600:
+		return true
+	}
+	return false
+}
 
-// An object configuring where the rule will be placed.
-type RuleNewParamsPositionAfterPosition struct {
-	// The ID of another rule to place the rule after. An empty value causes the rule
-	// to be placed at the bottom.
-	After param.Field[string] `json:"after"`
+type RuleNewParamsBodyRulesetsJSChallengeRule struct {
+	// The unique ID of the rule.
+	ID param.Field[string] `json:"id"`
+	// The action to perform when the rule matches.
+	Action param.Field[RuleNewParamsBodyRulesetsJSChallengeRuleAction] `json:"action"`
+	// The parameters configuring the rule's action.
+	ActionParameters param.Field[interface{}] `json:"action_parameters"`
+	// An informative description of the rule.
+	Description param.Field[string] `json:"description"`
+	// Whether the rule should be executed.
+	Enabled param.Field[bool] `json:"enabled"`
+	// Configure checks for exposed credentials.
+	ExposedCredentialCheck param.Field[RuleNewParamsBodyRulesetsJSChallengeRuleExposedCredentialCheck] `json:"exposed_credential_check"`
+	// The expression defining which traffic will match the rule.
+	Expression param.Field[string] `json:"expression"`
+	// An object configuring the rule's logging behavior.
+	Logging param.Field[LoggingParam] `json:"logging"`
+	// An object configuring the rule's ratelimit behavior.
+	Ratelimit param.Field[RuleNewParamsBodyRulesetsJSChallengeRuleRatelimit] `json:"ratelimit"`
+	// The reference of the rule (the rule ID by default).
+	Ref param.Field[string] `json:"ref"`
 }
 
-func (r RuleNewParamsPositionAfterPosition) MarshalJSON() (data []byte, err error) {
+func (r RuleNewParamsBodyRulesetsJSChallengeRule) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
-func (r RuleNewParamsPositionAfterPosition) implementsRulesetsRuleNewParamsPositionUnion() {}
+func (r RuleNewParamsBodyRulesetsJSChallengeRule) implementsRulesetsRuleNewParamsBodyUnion() {}
+
+// The action to perform when the rule matches.
+type RuleNewParamsBodyRulesetsJSChallengeRuleAction string
+
+const (
+	RuleNewParamsBodyRulesetsJSChallengeRuleActionJSChallenge RuleNewParamsBodyRulesetsJSChallengeRuleAction = "js_challenge"
+)
+
+func (r RuleNewParamsBodyRulesetsJSChallengeRuleAction) IsKnown() bool {
+	switch r {
+	case RuleNewParamsBodyRulesetsJSChallengeRuleActionJSChallenge:
+		return true
+	}
+	return false
+}
+
+// Configure checks for exposed credentials.
+type RuleNewParamsBodyRulesetsJSChallengeRuleExposedCredentialCheck struct {
+	// Expression that selects the password used in the credentials check.
+	PasswordExpression param.Field[string] `json:"password_expression,required"`
+	// Expression that selects the user ID used in the credentials check.
+	UsernameExpression param.Field[string] `json:"username_expression,required"`
+}
 
-// An object configuring where the rule will be placed.
-type RuleNewParamsPositionIndexPosition struct {
-	// An index at which to place the rule, where index 1 is the first rule.
-	Index param.Field[float64] `json:"index"`
+func (r RuleNewParamsBodyRulesetsJSChallengeRuleExposedCredentialCheck) MarshalJSON() (data []byte, err error) {
+	return apijson.MarshalRoot(r)
+}
+
+// An object configuring the rule's ratelimit behavior.
+type RuleNewParamsBodyRulesetsJSChallengeRuleRatelimit struct {
+	// Characteristics of the request on which the ratelimiter counter will be
+	// incremented.
+	Characteristics param.Field[[]string] `json:"characteristics,required"`
+	// Period in seconds over which the counter is being incremented.
+	Period param.Field[RuleNewParamsBodyRulesetsJSChallengeRuleRatelimitPeriod] `json:"period,required"`
+	// Defines when the ratelimit counter should be incremented. It is optional and
+	// defaults to the same as the rule's expression.
+	CountingExpression param.Field[string] `json:"counting_expression"`
+	// Period of time in seconds after which the action will be disabled following its
+	// first execution.
+	MitigationTimeout param.Field[int64] `json:"mitigation_timeout"`
+	// The threshold of requests per period after which the action will be executed for
+	// the first time.
+	RequestsPerPeriod param.Field[int64] `json:"requests_per_period"`
+	// Defines if ratelimit counting is only done when an origin is reached.
+	RequestsToOrigin param.Field[bool] `json:"requests_to_origin"`
+	// The score threshold per period for which the action will be executed the first
+	// time.
+	ScorePerPeriod param.Field[int64] `json:"score_per_period"`
+	// The response header name provided by the origin which should contain the score
+	// to increment ratelimit counter on.
+	ScoreResponseHeaderName param.Field[string] `json:"score_response_header_name"`
 }
 
-func (r RuleNewParamsPositionIndexPosition) MarshalJSON() (data []byte, err error) {
+func (r RuleNewParamsBodyRulesetsJSChallengeRuleRatelimit) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
-func (r RuleNewParamsPositionIndexPosition) implementsRulesetsRuleNewParamsPositionUnion() {}
+// Period in seconds over which the counter is being incremented.
+type RuleNewParamsBodyRulesetsJSChallengeRuleRatelimitPeriod int64
+
+const (
+	RuleNewParamsBodyRulesetsJSChallengeRuleRatelimitPeriod10   RuleNewParamsBodyRulesetsJSChallengeRuleRatelimitPeriod = 10
+	RuleNewParamsBodyRulesetsJSChallengeRuleRatelimitPeriod60   RuleNewParamsBodyRulesetsJSChallengeRuleRatelimitPeriod = 60
+	RuleNewParamsBodyRulesetsJSChallengeRuleRatelimitPeriod600  RuleNewParamsBodyRulesetsJSChallengeRuleRatelimitPeriod = 600
+	RuleNewParamsBodyRulesetsJSChallengeRuleRatelimitPeriod3600 RuleNewParamsBodyRulesetsJSChallengeRuleRatelimitPeriod = 3600
+)
+
+func (r RuleNewParamsBodyRulesetsJSChallengeRuleRatelimitPeriod) IsKnown() bool {
+	switch r {
+	case RuleNewParamsBodyRulesetsJSChallengeRuleRatelimitPeriod10, RuleNewParamsBodyRulesetsJSChallengeRuleRatelimitPeriod60, RuleNewParamsBodyRulesetsJSChallengeRuleRatelimitPeriod600, RuleNewParamsBodyRulesetsJSChallengeRuleRatelimitPeriod3600:
+		return true
+	}
+	return false
+}
+
+// The action to perform when the rule matches.
+type RuleNewParamsBodyAction string
+
+const (
+	RuleNewParamsBodyActionBlock                RuleNewParamsBodyAction = "block"
+	RuleNewParamsBodyActionChallenge            RuleNewParamsBodyAction = "challenge"
+	RuleNewParamsBodyActionCompressResponse     RuleNewParamsBodyAction = "compress_response"
+	RuleNewParamsBodyActionExecute              RuleNewParamsBodyAction = "execute"
+	RuleNewParamsBodyActionJSChallenge          RuleNewParamsBodyAction = "js_challenge"
+	RuleNewParamsBodyActionLog                  RuleNewParamsBodyAction = "log"
+	RuleNewParamsBodyActionManagedChallenge     RuleNewParamsBodyAction = "managed_challenge"
+	RuleNewParamsBodyActionRedirect             RuleNewParamsBodyAction = "redirect"
+	RuleNewParamsBodyActionRewrite              RuleNewParamsBodyAction = "rewrite"
+	RuleNewParamsBodyActionRoute                RuleNewParamsBodyAction = "route"
+	RuleNewParamsBodyActionScore                RuleNewParamsBodyAction = "score"
+	RuleNewParamsBodyActionServeError           RuleNewParamsBodyAction = "serve_error"
+	RuleNewParamsBodyActionSetConfig            RuleNewParamsBodyAction = "set_config"
+	RuleNewParamsBodyActionSkip                 RuleNewParamsBodyAction = "skip"
+	RuleNewParamsBodyActionSetCacheSettings     RuleNewParamsBodyAction = "set_cache_settings"
+	RuleNewParamsBodyActionLogCustomField       RuleNewParamsBodyAction = "log_custom_field"
+	RuleNewParamsBodyActionDDoSDynamic          RuleNewParamsBodyAction = "ddos_dynamic"
+	RuleNewParamsBodyActionForceConnectionClose RuleNewParamsBodyAction = "force_connection_close"
+)
+
+func (r RuleNewParamsBodyAction) IsKnown() bool {
+	switch r {
+	case RuleNewParamsBodyActionBlock, RuleNewParamsBodyActionChallenge, RuleNewParamsBodyActionCompressResponse, RuleNewParamsBodyActionExecute, RuleNewParamsBodyActionJSChallenge, RuleNewParamsBodyActionLog, RuleNewParamsBodyActionManagedChallenge, RuleNewParamsBodyActionRedirect, RuleNewParamsBodyActionRewrite, RuleNewParamsBodyActionRoute, RuleNewParamsBodyActionScore, RuleNewParamsBodyActionServeError, RuleNewParamsBodyActionSetConfig, RuleNewParamsBodyActionSkip, RuleNewParamsBodyActionSetCacheSettings, RuleNewParamsBodyActionLogCustomField, RuleNewParamsBodyActionDDoSDynamic, RuleNewParamsBodyActionForceConnectionClose:
+		return true
+	}
+	return false
+}
 
 // A response object.
 type RuleNewResponseEnvelope struct {
@@ -9477,82 +9757,298 @@ func (r RuleDeleteResponseEnvelopeSuccess) IsKnown() bool {
 }
 
 type RuleEditParams struct {
+	Body RuleEditParamsBodyUnion `json:"body,required"`
 	// The Account ID to use for this endpoint. Mutually exclusive with the Zone ID.
 	AccountID param.Field[string] `path:"account_id"`
 	// The Zone ID to use for this endpoint. Mutually exclusive with the Account ID.
 	ZoneID param.Field[string] `path:"zone_id"`
-	// An object configuring where the rule will be placed.
-	Position param.Field[RuleEditParamsPositionUnion] `json:"position"`
 }
 
 func (r RuleEditParams) MarshalJSON() (data []byte, err error) {
+	return apijson.MarshalRoot(r.Body)
+}
+
+type RuleEditParamsBody struct {
+	// The action to perform when the rule matches.
+	Action           param.Field[RuleEditParamsBodyAction] `json:"action"`
+	ActionParameters param.Field[interface{}]              `json:"action_parameters,required"`
+	Categories       param.Field[interface{}]              `json:"categories,required"`
+	// An informative description of the rule.
+	Description param.Field[string] `json:"description"`
+	// Whether the rule should be executed.
+	Enabled                param.Field[bool]        `json:"enabled"`
+	ExposedCredentialCheck param.Field[interface{}] `json:"exposed_credential_check,required"`
+	// The expression defining which traffic will match the rule.
+	Expression param.Field[string] `json:"expression"`
+	// The unique ID of the rule.
+	ID param.Field[string] `json:"id"`
+	// An object configuring the rule's logging behavior.
+	Logging   param.Field[LoggingParam] `json:"logging"`
+	Ratelimit param.Field[interface{}]  `json:"ratelimit,required"`
+	// The reference of the rule (the rule ID by default).
+	Ref param.Field[string] `json:"ref"`
+}
+
+func (r RuleEditParamsBody) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
-// An object configuring where the rule will be placed.
-type RuleEditParamsPosition struct {
-	// The ID of another rule to place the rule before. An empty value causes the rule
-	// to be placed at the top.
-	Before param.Field[string] `json:"before"`
-	// The ID of another rule to place the rule after. An empty value causes the rule
-	// to be placed at the bottom.
-	After param.Field[string] `json:"after"`
-	// An index at which to place the rule, where index 1 is the first rule.
-	Index param.Field[float64] `json:"index"`
+func (r RuleEditParamsBody) implementsRulesetsRuleEditParamsBodyUnion() {}
+
+// Satisfied by [rulesets.BlockRuleParam],
+// [rulesets.RuleEditParamsBodyRulesetsChallengeRule],
+// [rulesets.CompressResponseRuleParam], [rulesets.ExecuteRuleParam],
+// [rulesets.RuleEditParamsBodyRulesetsJSChallengeRule], [rulesets.LogRuleParam],
+// [rulesets.ManagedChallengeRuleParam], [rulesets.RedirectRuleParam],
+// [rulesets.RewriteRuleParam], [rulesets.RouteRuleParam],
+// [rulesets.ScoreRuleParam], [rulesets.ServeErrorRuleParam],
+// [rulesets.SetConfigRuleParam], [rulesets.SkipRuleParam],
+// [rulesets.SetCacheSettingsRuleParam], [rulesets.LogCustomFieldRuleParam],
+// [rulesets.DDoSDynamicRuleParam], [rulesets.ForceConnectionCloseRuleParam],
+// [RuleEditParamsBody].
+type RuleEditParamsBodyUnion interface {
+	implementsRulesetsRuleEditParamsBodyUnion()
+}
+
+type RuleEditParamsBodyRulesetsChallengeRule struct {
+	// The unique ID of the rule.
+	ID param.Field[string] `json:"id"`
+	// The action to perform when the rule matches.
+	Action param.Field[RuleEditParamsBodyRulesetsChallengeRuleAction] `json:"action"`
+	// The parameters configuring the rule's action.
+	ActionParameters param.Field[interface{}] `json:"action_parameters"`
+	// An informative description of the rule.
+	Description param.Field[string] `json:"description"`
+	// Whether the rule should be executed.
+	Enabled param.Field[bool] `json:"enabled"`
+	// Configure checks for exposed credentials.
+	ExposedCredentialCheck param.Field[RuleEditParamsBodyRulesetsChallengeRuleExposedCredentialCheck] `json:"exposed_credential_check"`
+	// The expression defining which traffic will match the rule.
+	Expression param.Field[string] `json:"expression"`
+	// An object configuring the rule's logging behavior.
+	Logging param.Field[LoggingParam] `json:"logging"`
+	// An object configuring the rule's ratelimit behavior.
+	Ratelimit param.Field[RuleEditParamsBodyRulesetsChallengeRuleRatelimit] `json:"ratelimit"`
+	// The reference of the rule (the rule ID by default).
+	Ref param.Field[string] `json:"ref"`
 }
 
-func (r RuleEditParamsPosition) MarshalJSON() (data []byte, err error) {
+func (r RuleEditParamsBodyRulesetsChallengeRule) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
-func (r RuleEditParamsPosition) implementsRulesetsRuleEditParamsPositionUnion() {}
+func (r RuleEditParamsBodyRulesetsChallengeRule) implementsRulesetsRuleEditParamsBodyUnion() {}
 
-// An object configuring where the rule will be placed.
-//
-// Satisfied by [rulesets.RuleEditParamsPositionBeforePosition],
-// [rulesets.RuleEditParamsPositionAfterPosition],
-// [rulesets.RuleEditParamsPositionIndexPosition], [RuleEditParamsPosition].
-type RuleEditParamsPositionUnion interface {
-	implementsRulesetsRuleEditParamsPositionUnion()
+// The action to perform when the rule matches.
+type RuleEditParamsBodyRulesetsChallengeRuleAction string
+
+const (
+	RuleEditParamsBodyRulesetsChallengeRuleActionChallenge RuleEditParamsBodyRulesetsChallengeRuleAction = "challenge"
+)
+
+func (r RuleEditParamsBodyRulesetsChallengeRuleAction) IsKnown() bool {
+	switch r {
+	case RuleEditParamsBodyRulesetsChallengeRuleActionChallenge:
+		return true
+	}
+	return false
+}
+
+// Configure checks for exposed credentials.
+type RuleEditParamsBodyRulesetsChallengeRuleExposedCredentialCheck struct {
+	// Expression that selects the password used in the credentials check.
+	PasswordExpression param.Field[string] `json:"password_expression,required"`
+	// Expression that selects the user ID used in the credentials check.
+	UsernameExpression param.Field[string] `json:"username_expression,required"`
+}
+
+func (r RuleEditParamsBodyRulesetsChallengeRuleExposedCredentialCheck) MarshalJSON() (data []byte, err error) {
+	return apijson.MarshalRoot(r)
 }
 
-// An object configuring where the rule will be placed.
-type RuleEditParamsPositionBeforePosition struct {
-	// The ID of another rule to place the rule before. An empty value causes the rule
-	// to be placed at the top.
-	Before param.Field[string] `json:"before"`
+// An object configuring the rule's ratelimit behavior.
+type RuleEditParamsBodyRulesetsChallengeRuleRatelimit struct {
+	// Characteristics of the request on which the ratelimiter counter will be
+	// incremented.
+	Characteristics param.Field[[]string] `json:"characteristics,required"`
+	// Period in seconds over which the counter is being incremented.
+	Period param.Field[RuleEditParamsBodyRulesetsChallengeRuleRatelimitPeriod] `json:"period,required"`
+	// Defines when the ratelimit counter should be incremented. It is optional and
+	// defaults to the same as the rule's expression.
+	CountingExpression param.Field[string] `json:"counting_expression"`
+	// Period of time in seconds after which the action will be disabled following its
+	// first execution.
+	MitigationTimeout param.Field[int64] `json:"mitigation_timeout"`
+	// The threshold of requests per period after which the action will be executed for
+	// the first time.
+	RequestsPerPeriod param.Field[int64] `json:"requests_per_period"`
+	// Defines if ratelimit counting is only done when an origin is reached.
+	RequestsToOrigin param.Field[bool] `json:"requests_to_origin"`
+	// The score threshold per period for which the action will be executed the first
+	// time.
+	ScorePerPeriod param.Field[int64] `json:"score_per_period"`
+	// The response header name provided by the origin which should contain the score
+	// to increment ratelimit counter on.
+	ScoreResponseHeaderName param.Field[string] `json:"score_response_header_name"`
 }
 
-func (r RuleEditParamsPositionBeforePosition) MarshalJSON() (data []byte, err error) {
+func (r RuleEditParamsBodyRulesetsChallengeRuleRatelimit) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
-func (r RuleEditParamsPositionBeforePosition) implementsRulesetsRuleEditParamsPositionUnion() {}
+// Period in seconds over which the counter is being incremented.
+type RuleEditParamsBodyRulesetsChallengeRuleRatelimitPeriod int64
+
+const (
+	RuleEditParamsBodyRulesetsChallengeRuleRatelimitPeriod10   RuleEditParamsBodyRulesetsChallengeRuleRatelimitPeriod = 10
+	RuleEditParamsBodyRulesetsChallengeRuleRatelimitPeriod60   RuleEditParamsBodyRulesetsChallengeRuleRatelimitPeriod = 60
+	RuleEditParamsBodyRulesetsChallengeRuleRatelimitPeriod600  RuleEditParamsBodyRulesetsChallengeRuleRatelimitPeriod = 600
+	RuleEditParamsBodyRulesetsChallengeRuleRatelimitPeriod3600 RuleEditParamsBodyRulesetsChallengeRuleRatelimitPeriod = 3600
+)
+
+func (r RuleEditParamsBodyRulesetsChallengeRuleRatelimitPeriod) IsKnown() bool {
+	switch r {
+	case RuleEditParamsBodyRulesetsChallengeRuleRatelimitPeriod10, RuleEditParamsBodyRulesetsChallengeRuleRatelimitPeriod60, RuleEditParamsBodyRulesetsChallengeRuleRatelimitPeriod600, RuleEditParamsBodyRulesetsChallengeRuleRatelimitPeriod3600:
+		return true
+	}
+	return false
+}
 
-// An object configuring where the rule will be placed.
-type RuleEditParamsPositionAfterPosition struct {
-	// The ID of another rule to place the rule after. An empty value causes the rule
-	// to be placed at the bottom.
-	After param.Field[string] `json:"after"`
+type RuleEditParamsBodyRulesetsJSChallengeRule struct {
+	// The unique ID of the rule.
+	ID param.Field[string] `json:"id"`
+	// The action to perform when the rule matches.
+	Action param.Field[RuleEditParamsBodyRulesetsJSChallengeRuleAction] `json:"action"`
+	// The parameters configuring the rule's action.
+	ActionParameters param.Field[interface{}] `json:"action_parameters"`
+	// An informative description of the rule.
+	Description param.Field[string] `json:"description"`
+	// Whether the rule should be executed.
+	Enabled param.Field[bool] `json:"enabled"`
+	// Configure checks for exposed credentials.
+	ExposedCredentialCheck param.Field[RuleEditParamsBodyRulesetsJSChallengeRuleExposedCredentialCheck] `json:"exposed_credential_check"`
+	// The expression defining which traffic will match the rule.
+	Expression param.Field[string] `json:"expression"`
+	// An object configuring the rule's logging behavior.
+	Logging param.Field[LoggingParam] `json:"logging"`
+	// An object configuring the rule's ratelimit behavior.
+	Ratelimit param.Field[RuleEditParamsBodyRulesetsJSChallengeRuleRatelimit] `json:"ratelimit"`
+	// The reference of the rule (the rule ID by default).
+	Ref param.Field[string] `json:"ref"`
 }
 
-func (r RuleEditParamsPositionAfterPosition) MarshalJSON() (data []byte, err error) {
+func (r RuleEditParamsBodyRulesetsJSChallengeRule) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
-func (r RuleEditParamsPositionAfterPosition) implementsRulesetsRuleEditParamsPositionUnion() {}
+func (r RuleEditParamsBodyRulesetsJSChallengeRule) implementsRulesetsRuleEditParamsBodyUnion() {}
+
+// The action to perform when the rule matches.
+type RuleEditParamsBodyRulesetsJSChallengeRuleAction string
+
+const (
+	RuleEditParamsBodyRulesetsJSChallengeRuleActionJSChallenge RuleEditParamsBodyRulesetsJSChallengeRuleAction = "js_challenge"
+)
+
+func (r RuleEditParamsBodyRulesetsJSChallengeRuleAction) IsKnown() bool {
+	switch r {
+	case RuleEditParamsBodyRulesetsJSChallengeRuleActionJSChallenge:
+		return true
+	}
+	return false
+}
+
+// Configure checks for exposed credentials.
+type RuleEditParamsBodyRulesetsJSChallengeRuleExposedCredentialCheck struct {
+	// Expression that selects the password used in the credentials check.
+	PasswordExpression param.Field[string] `json:"password_expression,required"`
+	// Expression that selects the user ID used in the credentials check.
+	UsernameExpression param.Field[string] `json:"username_expression,required"`
+}
+
+func (r RuleEditParamsBodyRulesetsJSChallengeRuleExposedCredentialCheck) MarshalJSON() (data []byte, err error) {
+	return apijson.MarshalRoot(r)
+}
 
-// An object configuring where the rule will be placed.
-type RuleEditParamsPositionIndexPosition struct {
-	// An index at which to place the rule, where index 1 is the first rule.
-	Index param.Field[float64] `json:"index"`
+// An object configuring the rule's ratelimit behavior.
+type RuleEditParamsBodyRulesetsJSChallengeRuleRatelimit struct {
+	// Characteristics of the request on which the ratelimiter counter will be
+	// incremented.
+	Characteristics param.Field[[]string] `json:"characteristics,required"`
+	// Period in seconds over which the counter is being incremented.
+	Period param.Field[RuleEditParamsBodyRulesetsJSChallengeRuleRatelimitPeriod] `json:"period,required"`
+	// Defines when the ratelimit counter should be incremented. It is optional and
+	// defaults to the same as the rule's expression.
+	CountingExpression param.Field[string] `json:"counting_expression"`
+	// Period of time in seconds after which the action will be disabled following its
+	// first execution.
+	MitigationTimeout param.Field[int64] `json:"mitigation_timeout"`
+	// The threshold of requests per period after which the action will be executed for
+	// the first time.
+	RequestsPerPeriod param.Field[int64] `json:"requests_per_period"`
+	// Defines if ratelimit counting is only done when an origin is reached.
+	RequestsToOrigin param.Field[bool] `json:"requests_to_origin"`
+	// The score threshold per period for which the action will be executed the first
+	// time.
+	ScorePerPeriod param.Field[int64] `json:"score_per_period"`
+	// The response header name provided by the origin which should contain the score
+	// to increment ratelimit counter on.
+	ScoreResponseHeaderName param.Field[string] `json:"score_response_header_name"`
 }
 
-func (r RuleEditParamsPositionIndexPosition) MarshalJSON() (data []byte, err error) {
+func (r RuleEditParamsBodyRulesetsJSChallengeRuleRatelimit) MarshalJSON() (data []byte, err error) {
 	return apijson.MarshalRoot(r)
 }
 
-func (r RuleEditParamsPositionIndexPosition) implementsRulesetsRuleEditParamsPositionUnion() {}
+// Period in seconds over which the counter is being incremented.
+type RuleEditParamsBodyRulesetsJSChallengeRuleRatelimitPeriod int64
+
+const (
+	RuleEditParamsBodyRulesetsJSChallengeRuleRatelimitPeriod10   RuleEditParamsBodyRulesetsJSChallengeRuleRatelimitPeriod = 10
+	RuleEditParamsBodyRulesetsJSChallengeRuleRatelimitPeriod60   RuleEditParamsBodyRulesetsJSChallengeRuleRatelimitPeriod = 60
+	RuleEditParamsBodyRulesetsJSChallengeRuleRatelimitPeriod600  RuleEditParamsBodyRulesetsJSChallengeRuleRatelimitPeriod = 600
+	RuleEditParamsBodyRulesetsJSChallengeRuleRatelimitPeriod3600 RuleEditParamsBodyRulesetsJSChallengeRuleRatelimitPeriod = 3600
+)
+
+func (r RuleEditParamsBodyRulesetsJSChallengeRuleRatelimitPeriod) IsKnown() bool {
+	switch r {
+	case RuleEditParamsBodyRulesetsJSChallengeRuleRatelimitPeriod10, RuleEditParamsBodyRulesetsJSChallengeRuleRatelimitPeriod60, RuleEditParamsBodyRulesetsJSChallengeRuleRatelimitPeriod600, RuleEditParamsBodyRulesetsJSChallengeRuleRatelimitPeriod3600:
+		return true
+	}
+	return false
+}
+
+// The action to perform when the rule matches.
+type RuleEditParamsBodyAction string
+
+const (
+	RuleEditParamsBodyActionBlock                RuleEditParamsBodyAction = "block"
+	RuleEditParamsBodyActionChallenge            RuleEditParamsBodyAction = "challenge"
+	RuleEditParamsBodyActionCompressResponse     RuleEditParamsBodyAction = "compress_response"
+	RuleEditParamsBodyActionExecute              RuleEditParamsBodyAction = "execute"
+	RuleEditParamsBodyActionJSChallenge          RuleEditParamsBodyAction = "js_challenge"
+	RuleEditParamsBodyActionLog                  RuleEditParamsBodyAction = "log"
+	RuleEditParamsBodyActionManagedChallenge     RuleEditParamsBodyAction = "managed_challenge"
+	RuleEditParamsBodyActionRedirect             RuleEditParamsBodyAction = "redirect"
+	RuleEditParamsBodyActionRewrite              RuleEditParamsBodyAction = "rewrite"
+	RuleEditParamsBodyActionRoute                RuleEditParamsBodyAction = "route"
+	RuleEditParamsBodyActionScore                RuleEditParamsBodyAction = "score"
+	RuleEditParamsBodyActionServeError           RuleEditParamsBodyAction = "serve_error"
+	RuleEditParamsBodyActionSetConfig            RuleEditParamsBodyAction = "set_config"
+	RuleEditParamsBodyActionSkip                 RuleEditParamsBodyAction = "skip"
+	RuleEditParamsBodyActionSetCacheSettings     RuleEditParamsBodyAction = "set_cache_settings"
+	RuleEditParamsBodyActionLogCustomField       RuleEditParamsBodyAction = "log_custom_field"
+	RuleEditParamsBodyActionDDoSDynamic          RuleEditParamsBodyAction = "ddos_dynamic"
+	RuleEditParamsBodyActionForceConnectionClose RuleEditParamsBodyAction = "force_connection_close"
+)
+
+func (r RuleEditParamsBodyAction) IsKnown() bool {
+	switch r {
+	case RuleEditParamsBodyActionBlock, RuleEditParamsBodyActionChallenge, RuleEditParamsBodyActionCompressResponse, RuleEditParamsBodyActionExecute, RuleEditParamsBodyActionJSChallenge, RuleEditParamsBodyActionLog, RuleEditParamsBodyActionManagedChallenge, RuleEditParamsBodyActionRedirect, RuleEditParamsBodyActionRewrite, RuleEditParamsBodyActionRoute, RuleEditParamsBodyActionScore, RuleEditParamsBodyActionServeError, RuleEditParamsBodyActionSetConfig, RuleEditParamsBodyActionSkip, RuleEditParamsBodyActionSetCacheSettings, RuleEditParamsBodyActionLogCustomField, RuleEditParamsBodyActionDDoSDynamic, RuleEditParamsBodyActionForceConnectionClose:
+		return true
+	}
+	return false
+}
 
 // A response object.
 type RuleEditResponseEnvelope struct {
diff --git a/shared/union.go b/shared/union.go
index f940237b0..885b31da4 100644
--- a/shared/union.go
+++ b/shared/union.go
@@ -94,7 +94,6 @@ func (UnionInt) ImplementsRulesListItemGetResponseUnion()   {}
 
 type UnionFloat float64
 
-func (UnionFloat) ImplementsDNSTTL()                                          {}
 func (UnionFloat) ImplementsRadarRankingTimeseriesGroupsResponseSerie0Union() {}
 func (UnionFloat) ImplementsHostnamesSettingValueUnionParam()                 {}
 func (UnionFloat) ImplementsHostnamesSettingValueUnion()                      {}
diff --git a/spectrum/app.go b/spectrum/app.go
index b5c577710..b00a26e6f 100644
--- a/spectrum/app.go
+++ b/spectrum/app.go
@@ -16,6 +16,7 @@ import (
 	"github.com/cloudflare/cloudflare-go/v3/internal/param"
 	"github.com/cloudflare/cloudflare-go/v3/internal/requestconfig"
 	"github.com/cloudflare/cloudflare-go/v3/option"
+	"github.com/cloudflare/cloudflare-go/v3/packages/pagination"
 	"github.com/cloudflare/cloudflare-go/v3/shared"
 	"github.com/tidwall/gjson"
 )
@@ -80,20 +81,30 @@ func (r *AppService) Update(ctx context.Context, appID string, params AppUpdateP
 }
 
 // Retrieves a list of currently existing Spectrum applications inside a zone.
-func (r *AppService) List(ctx context.Context, params AppListParams, opts ...option.RequestOption) (res *AppListResponseUnion, err error) {
-	var env AppListResponseEnvelope
+func (r *AppService) List(ctx context.Context, params AppListParams, opts ...option.RequestOption) (res *pagination.V4PagePaginationArray[AppListResponse], err error) {
+	var raw *http.Response
 	opts = append(r.Options[:], opts...)
+	opts = append([]option.RequestOption{option.WithResponseInto(&raw)}, opts...)
 	if params.ZoneID.Value == "" {
 		err = errors.New("missing required zone_id parameter")
 		return
 	}
 	path := fmt.Sprintf("zones/%s/spectrum/apps", params.ZoneID)
-	err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, params, &env, opts...)
+	cfg, err := requestconfig.NewRequestConfig(ctx, http.MethodGet, path, params, &res, opts...)
 	if err != nil {
-		return
+		return nil, err
 	}
-	res = &env.Result
-	return
+	err = cfg.Execute()
+	if err != nil {
+		return nil, err
+	}
+	res.SetPageConfig(cfg, raw)
+	return res, nil
+}
+
+// Retrieves a list of currently existing Spectrum applications inside a zone.
+func (r *AppService) ListAutoPaging(ctx context.Context, params AppListParams, opts ...option.RequestOption) *pagination.V4PagePaginationArrayAutoPager[AppListResponse] {
+	return pagination.NewV4PagePaginationArrayAutoPager(r.List(ctx, params, opts...))
 }
 
 // Deletes a previously existing application.
@@ -839,32 +850,76 @@ func (r AppUpdateResponseTrafficType) IsKnown() bool {
 	return false
 }
 
-// Union satisfied by [spectrum.AppListResponseArray] or
-// [spectrum.AppListResponseArray].
-type AppListResponseUnion interface {
-	implementsSpectrumAppListResponseUnion()
+type AppListResponse struct {
+	Errors   []shared.ResponseInfo `json:"errors,required"`
+	Messages []shared.ResponseInfo `json:"messages,required"`
+	// Whether the API call was successful
+	Success    AppListResponseSuccess     `json:"success,required"`
+	Result     AppListResponseResultUnion `json:"result"`
+	ResultInfo AppListResponseResultInfo  `json:"result_info"`
+	JSON       appListResponseJSON        `json:"-"`
+}
+
+// appListResponseJSON contains the JSON metadata for the struct [AppListResponse]
+type appListResponseJSON struct {
+	Errors      apijson.Field
+	Messages    apijson.Field
+	Success     apijson.Field
+	Result      apijson.Field
+	ResultInfo  apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *AppListResponse) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r appListResponseJSON) RawJSON() string {
+	return r.raw
+}
+
+// Whether the API call was successful
+type AppListResponseSuccess bool
+
+const (
+	AppListResponseSuccessTrue AppListResponseSuccess = true
+)
+
+func (r AppListResponseSuccess) IsKnown() bool {
+	switch r {
+	case AppListResponseSuccessTrue:
+		return true
+	}
+	return false
+}
+
+// Union satisfied by [spectrum.AppListResponseResultArray] or
+// [spectrum.AppListResponseResultArray].
+type AppListResponseResultUnion interface {
+	implementsSpectrumAppListResponseResultUnion()
 }
 
 func init() {
 	apijson.RegisterUnion(
-		reflect.TypeOf((*AppListResponseUnion)(nil)).Elem(),
+		reflect.TypeOf((*AppListResponseResultUnion)(nil)).Elem(),
 		"",
 		apijson.UnionVariant{
 			TypeFilter: gjson.JSON,
-			Type:       reflect.TypeOf(AppListResponseArray{}),
+			Type:       reflect.TypeOf(AppListResponseResultArray{}),
 		},
 		apijson.UnionVariant{
 			TypeFilter: gjson.JSON,
-			Type:       reflect.TypeOf(AppListResponseArray{}),
+			Type:       reflect.TypeOf(AppListResponseResultArray{}),
 		},
 	)
 }
 
-type AppListResponseArray []AppListResponseArrayItem
+type AppListResponseResultArray []AppListResponseResultArrayItem
 
-func (r AppListResponseArray) implementsSpectrumAppListResponseUnion() {}
+func (r AppListResponseResultArray) implementsSpectrumAppListResponseResultUnion() {}
 
-type AppListResponseArrayItem struct {
+type AppListResponseResultArrayItem struct {
 	// App identifier.
 	ID string `json:"id,required"`
 	// When the Application was created.
@@ -883,15 +938,15 @@ type AppListResponseArrayItem struct {
 	// [Enable Proxy protocol](https://developers.cloudflare.com/spectrum/getting-started/proxy-protocol/)
 	// for implementation details on PROXY Protocol V1, PROXY Protocol V2, and Simple
 	// Proxy Protocol.
-	ProxyProtocol AppListResponseArrayProxyProtocol `json:"proxy_protocol,required"`
+	ProxyProtocol AppListResponseResultArrayProxyProtocol `json:"proxy_protocol,required"`
 	// The type of TLS termination associated with the application.
-	TLS AppListResponseArrayTLS `json:"tls,required"`
+	TLS AppListResponseResultArrayTLS `json:"tls,required"`
 	// Determines how data travels from the edge to your origin. When set to "direct",
 	// Spectrum will send traffic directly to your origin, and the application's type
 	// is derived from the `protocol`. When set to "http" or "https", Spectrum will
 	// apply Cloudflare's HTTP/HTTPS features as it sends traffic to your origin, and
 	// the application type matches this property exactly.
-	TrafficType AppListResponseArrayTrafficType `json:"traffic_type,required"`
+	TrafficType AppListResponseResultArrayTrafficType `json:"traffic_type,required"`
 	// Enables Argo Smart Routing for this application. Notes: Only available for TCP
 	// applications with traffic_type set to "direct".
 	ArgoSmartRouting bool `json:"argo_smart_routing"`
@@ -907,13 +962,13 @@ type AppListResponseArrayItem struct {
 	// `1000`, or a string to specify a range of origin ports, for example
 	// `"1000-2000"`. Notes: If specifying a port range, the number of ports in the
 	// range must match the number of ports specified in the "protocol" field.
-	OriginPort OriginPortUnion              `json:"origin_port"`
-	JSON       appListResponseArrayItemJSON `json:"-"`
+	OriginPort OriginPortUnion                    `json:"origin_port"`
+	JSON       appListResponseResultArrayItemJSON `json:"-"`
 }
 
-// appListResponseArrayItemJSON contains the JSON metadata for the struct
-// [AppListResponseArrayItem]
-type appListResponseArrayItemJSON struct {
+// appListResponseResultArrayItemJSON contains the JSON metadata for the struct
+// [AppListResponseResultArrayItem]
+type appListResponseResultArrayItemJSON struct {
 	ID               apijson.Field
 	CreatedOn        apijson.Field
 	DNS              apijson.Field
@@ -932,11 +987,11 @@ type appListResponseArrayItemJSON struct {
 	ExtraFields      map[string]apijson.Field
 }
 
-func (r *AppListResponseArrayItem) UnmarshalJSON(data []byte) (err error) {
+func (r *AppListResponseResultArrayItem) UnmarshalJSON(data []byte) (err error) {
 	return apijson.UnmarshalRoot(data, r)
 }
 
-func (r appListResponseArrayItemJSON) RawJSON() string {
+func (r appListResponseResultArrayItemJSON) RawJSON() string {
 	return r.raw
 }
 
@@ -944,36 +999,36 @@ func (r appListResponseArrayItemJSON) RawJSON() string {
 // [Enable Proxy protocol](https://developers.cloudflare.com/spectrum/getting-started/proxy-protocol/)
 // for implementation details on PROXY Protocol V1, PROXY Protocol V2, and Simple
 // Proxy Protocol.
-type AppListResponseArrayProxyProtocol string
+type AppListResponseResultArrayProxyProtocol string
 
 const (
-	AppListResponseArrayProxyProtocolOff    AppListResponseArrayProxyProtocol = "off"
-	AppListResponseArrayProxyProtocolV1     AppListResponseArrayProxyProtocol = "v1"
-	AppListResponseArrayProxyProtocolV2     AppListResponseArrayProxyProtocol = "v2"
-	AppListResponseArrayProxyProtocolSimple AppListResponseArrayProxyProtocol = "simple"
+	AppListResponseResultArrayProxyProtocolOff    AppListResponseResultArrayProxyProtocol = "off"
+	AppListResponseResultArrayProxyProtocolV1     AppListResponseResultArrayProxyProtocol = "v1"
+	AppListResponseResultArrayProxyProtocolV2     AppListResponseResultArrayProxyProtocol = "v2"
+	AppListResponseResultArrayProxyProtocolSimple AppListResponseResultArrayProxyProtocol = "simple"
 )
 
-func (r AppListResponseArrayProxyProtocol) IsKnown() bool {
+func (r AppListResponseResultArrayProxyProtocol) IsKnown() bool {
 	switch r {
-	case AppListResponseArrayProxyProtocolOff, AppListResponseArrayProxyProtocolV1, AppListResponseArrayProxyProtocolV2, AppListResponseArrayProxyProtocolSimple:
+	case AppListResponseResultArrayProxyProtocolOff, AppListResponseResultArrayProxyProtocolV1, AppListResponseResultArrayProxyProtocolV2, AppListResponseResultArrayProxyProtocolSimple:
 		return true
 	}
 	return false
 }
 
 // The type of TLS termination associated with the application.
-type AppListResponseArrayTLS string
+type AppListResponseResultArrayTLS string
 
 const (
-	AppListResponseArrayTLSOff      AppListResponseArrayTLS = "off"
-	AppListResponseArrayTLSFlexible AppListResponseArrayTLS = "flexible"
-	AppListResponseArrayTLSFull     AppListResponseArrayTLS = "full"
-	AppListResponseArrayTLSStrict   AppListResponseArrayTLS = "strict"
+	AppListResponseResultArrayTLSOff      AppListResponseResultArrayTLS = "off"
+	AppListResponseResultArrayTLSFlexible AppListResponseResultArrayTLS = "flexible"
+	AppListResponseResultArrayTLSFull     AppListResponseResultArrayTLS = "full"
+	AppListResponseResultArrayTLSStrict   AppListResponseResultArrayTLS = "strict"
 )
 
-func (r AppListResponseArrayTLS) IsKnown() bool {
+func (r AppListResponseResultArrayTLS) IsKnown() bool {
 	switch r {
-	case AppListResponseArrayTLSOff, AppListResponseArrayTLSFlexible, AppListResponseArrayTLSFull, AppListResponseArrayTLSStrict:
+	case AppListResponseResultArrayTLSOff, AppListResponseResultArrayTLSFlexible, AppListResponseResultArrayTLSFull, AppListResponseResultArrayTLSStrict:
 		return true
 	}
 	return false
@@ -984,22 +1039,53 @@ func (r AppListResponseArrayTLS) IsKnown() bool {
 // is derived from the `protocol`. When set to "http" or "https", Spectrum will
 // apply Cloudflare's HTTP/HTTPS features as it sends traffic to your origin, and
 // the application type matches this property exactly.
-type AppListResponseArrayTrafficType string
+type AppListResponseResultArrayTrafficType string
 
 const (
-	AppListResponseArrayTrafficTypeDirect AppListResponseArrayTrafficType = "direct"
-	AppListResponseArrayTrafficTypeHTTP   AppListResponseArrayTrafficType = "http"
-	AppListResponseArrayTrafficTypeHTTPS  AppListResponseArrayTrafficType = "https"
+	AppListResponseResultArrayTrafficTypeDirect AppListResponseResultArrayTrafficType = "direct"
+	AppListResponseResultArrayTrafficTypeHTTP   AppListResponseResultArrayTrafficType = "http"
+	AppListResponseResultArrayTrafficTypeHTTPS  AppListResponseResultArrayTrafficType = "https"
 )
 
-func (r AppListResponseArrayTrafficType) IsKnown() bool {
+func (r AppListResponseResultArrayTrafficType) IsKnown() bool {
 	switch r {
-	case AppListResponseArrayTrafficTypeDirect, AppListResponseArrayTrafficTypeHTTP, AppListResponseArrayTrafficTypeHTTPS:
+	case AppListResponseResultArrayTrafficTypeDirect, AppListResponseResultArrayTrafficTypeHTTP, AppListResponseResultArrayTrafficTypeHTTPS:
 		return true
 	}
 	return false
 }
 
+type AppListResponseResultInfo struct {
+	// Total number of results for the requested service
+	Count float64 `json:"count"`
+	// Current page within paginated list of results
+	Page float64 `json:"page"`
+	// Number of results per page of results
+	PerPage float64 `json:"per_page"`
+	// Total results available without any search parameters
+	TotalCount float64                       `json:"total_count"`
+	JSON       appListResponseResultInfoJSON `json:"-"`
+}
+
+// appListResponseResultInfoJSON contains the JSON metadata for the struct
+// [AppListResponseResultInfo]
+type appListResponseResultInfoJSON struct {
+	Count       apijson.Field
+	Page        apijson.Field
+	PerPage     apijson.Field
+	TotalCount  apijson.Field
+	raw         string
+	ExtraFields map[string]apijson.Field
+}
+
+func (r *AppListResponseResultInfo) UnmarshalJSON(data []byte) (err error) {
+	return apijson.UnmarshalRoot(data, r)
+}
+
+func (r appListResponseResultInfoJSON) RawJSON() string {
+	return r.raw
+}
+
 type AppDeleteResponse struct {
 	// Identifier
 	ID   string                `json:"id,required"`
@@ -2004,82 +2090,6 @@ func (r AppListParamsOrder) IsKnown() bool {
 	return false
 }
 
-type AppListResponseEnvelope struct {
-	Errors   []shared.ResponseInfo `json:"errors,required"`
-	Messages []shared.ResponseInfo `json:"messages,required"`
-	// Whether the API call was successful
-	Success    AppListResponseEnvelopeSuccess    `json:"success,required"`
-	Result     AppListResponseUnion              `json:"result"`
-	ResultInfo AppListResponseEnvelopeResultInfo `json:"result_info"`
-	JSON       appListResponseEnvelopeJSON       `json:"-"`
-}
-
-// appListResponseEnvelopeJSON contains the JSON metadata for the struct
-// [AppListResponseEnvelope]
-type appListResponseEnvelopeJSON struct {
-	Errors      apijson.Field
-	Messages    apijson.Field
-	Success     apijson.Field
-	Result      apijson.Field
-	ResultInfo  apijson.Field
-	raw         string
-	ExtraFields map[string]apijson.Field
-}
-
-func (r *AppListResponseEnvelope) UnmarshalJSON(data []byte) (err error) {
-	return apijson.UnmarshalRoot(data, r)
-}
-
-func (r appListResponseEnvelopeJSON) RawJSON() string {
-	return r.raw
-}
-
-// Whether the API call was successful
-type AppListResponseEnvelopeSuccess bool
-
-const (
-	AppListResponseEnvelopeSuccessTrue AppListResponseEnvelopeSuccess = true
-)
-
-func (r AppListResponseEnvelopeSuccess) IsKnown() bool {
-	switch r {
-	case AppListResponseEnvelopeSuccessTrue:
-		return true
-	}
-	return false
-}
-
-type AppListResponseEnvelopeResultInfo struct {
-	// Total number of results for the requested service
-	Count float64 `json:"count"`
-	// Current page within paginated list of results
-	Page float64 `json:"page"`
-	// Number of results per page of results
-	PerPage float64 `json:"per_page"`
-	// Total results available without any search parameters
-	TotalCount float64                               `json:"total_count"`
-	JSON       appListResponseEnvelopeResultInfoJSON `json:"-"`
-}
-
-// appListResponseEnvelopeResultInfoJSON contains the JSON metadata for the struct
-// [AppListResponseEnvelopeResultInfo]
-type appListResponseEnvelopeResultInfoJSON struct {
-	Count       apijson.Field
-	Page        apijson.Field
-	PerPage     apijson.Field
-	TotalCount  apijson.Field
-	raw         string
-	ExtraFields map[string]apijson.Field
-}
-
-func (r *AppListResponseEnvelopeResultInfo) UnmarshalJSON(data []byte) (err error) {
-	return apijson.UnmarshalRoot(data, r)
-}
-
-func (r appListResponseEnvelopeResultInfoJSON) RawJSON() string {
-	return r.raw
-}
-
 type AppDeleteParams struct {
 	// Zone identifier.
 	ZoneID param.Field[string] `path:"zone_id,required"`
diff --git a/zero_trust/dlpdatasetversion.go b/zero_trust/dlpdatasetversion.go
index ba9ddd86f..cac55ac88 100644
--- a/zero_trust/dlpdatasetversion.go
+++ b/zero_trust/dlpdatasetversion.go
@@ -114,8 +114,10 @@ func (r DLPDatasetVersionNewParams) MarshalJSON() (data []byte, err error) {
 }
 
 type DLPDatasetVersionNewParamsBody struct {
-	EntryID   param.Field[string] `json:"entry_id" format:"uuid"`
-	EntryName param.Field[string] `json:"entry_name"`
+	HeaderName param.Field[string] `json:"header_name"`
+	NumCells   param.Field[int64]  `json:"num_cells"`
+	EntryID    param.Field[string] `json:"entry_id" format:"uuid"`
+	EntryName  param.Field[string] `json:"entry_name"`
 }
 
 func (r DLPDatasetVersionNewParamsBody) MarshalJSON() (data []byte, err error) {
@@ -132,7 +134,9 @@ type DLPDatasetVersionNewParamsBodyUnion interface {
 }
 
 type DLPDatasetVersionNewParamsBodyExistingColumn struct {
-	EntryID param.Field[string] `json:"entry_id,required" format:"uuid"`
+	EntryID    param.Field[string] `json:"entry_id,required" format:"uuid"`
+	HeaderName param.Field[string] `json:"header_name"`
+	NumCells   param.Field[int64]  `json:"num_cells"`
 }
 
 func (r DLPDatasetVersionNewParamsBodyExistingColumn) MarshalJSON() (data []byte, err error) {
@@ -143,7 +147,9 @@ func (r DLPDatasetVersionNewParamsBodyExistingColumn) implementsZeroTrustDLPData
 }
 
 type DLPDatasetVersionNewParamsBodyNewColumn struct {
-	EntryName param.Field[string] `json:"entry_name,required"`
+	EntryName  param.Field[string] `json:"entry_name,required"`
+	HeaderName param.Field[string] `json:"header_name"`
+	NumCells   param.Field[int64]  `json:"num_cells"`
 }
 
 func (r DLPDatasetVersionNewParamsBodyNewColumn) MarshalJSON() (data []byte, err error) {


Test patch:
diff --git a/dns/record_test.go b/dns/record_test.go
index 2500d915a..396ad932a 100644
--- a/dns/record_test.go
+++ b/dns/record_test.go
@@ -31,13 +31,9 @@ func TestRecordNewWithOptionalParams(t *testing.T) {
 	)
 	_, err := client.DNS.Records.New(context.TODO(), dns.RecordNewParams{
 		ZoneID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"),
-		Record: dns.RecordParam{
-			Name:     cloudflare.F("example.com"),
-			Comment:  cloudflare.F("Domain verification record"),
-			Proxied:  cloudflare.F(true),
-			Settings: cloudflare.F[any](map[string]interface{}{}),
-			Tags:     cloudflare.F([]dns.RecordTagsParam{"owner:dns-team", "owner:dns-team", "owner:dns-team"}),
-			TTL:      cloudflare.F(dns.TTL1),
+		Record: dns.ARecordParam{
+			Content: cloudflare.F("198.51.100.4"),
+			Type:    cloudflare.F(dns.ARecordTypeA),
 		},
 	})
 	if err != nil {
@@ -68,13 +64,9 @@ func TestRecordUpdateWithOptionalParams(t *testing.T) {
 		"023e105f4ecef8ad9ca31a8372d0c353",
 		dns.RecordUpdateParams{
 			ZoneID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"),
-			Record: dns.RecordParam{
-				Name:     cloudflare.F("example.com"),
-				Comment:  cloudflare.F("Domain verification record"),
-				Proxied:  cloudflare.F(true),
-				Settings: cloudflare.F[any](map[string]interface{}{}),
-				Tags:     cloudflare.F([]dns.RecordTagsParam{"owner:dns-team", "owner:dns-team", "owner:dns-team"}),
-				TTL:      cloudflare.F(dns.TTL1),
+			Record: dns.ARecordParam{
+				Content: cloudflare.F("198.51.100.4"),
+				Type:    cloudflare.F(dns.ARecordTypeA),
 			},
 		},
 	)
@@ -210,27 +202,15 @@ func TestRecordBatchWithOptionalParams(t *testing.T) {
 			Content: cloudflare.F("198.51.100.4"),
 			Type:    cloudflare.F(dns.ARecordTypeA),
 		}}),
-		Posts: cloudflare.F([]dns.RecordParam{{
-			Name:     cloudflare.F("example.com"),
-			Comment:  cloudflare.F("Domain verification record"),
-			Proxied:  cloudflare.F(true),
-			Settings: cloudflare.F[any](map[string]interface{}{}),
-			Tags:     cloudflare.F([]dns.RecordTagsParam{"owner:dns-team", "owner:dns-team", "owner:dns-team"}),
-			TTL:      cloudflare.F(dns.TTL1),
-		}, {
-			Name:     cloudflare.F("example.com"),
-			Comment:  cloudflare.F("Domain verification record"),
-			Proxied:  cloudflare.F(true),
-			Settings: cloudflare.F[any](map[string]interface{}{}),
-			Tags:     cloudflare.F([]dns.RecordTagsParam{"owner:dns-team", "owner:dns-team", "owner:dns-team"}),
-			TTL:      cloudflare.F(dns.TTL1),
-		}, {
-			Name:     cloudflare.F("example.com"),
-			Comment:  cloudflare.F("Domain verification record"),
-			Proxied:  cloudflare.F(true),
-			Settings: cloudflare.F[any](map[string]interface{}{}),
-			Tags:     cloudflare.F([]dns.RecordTagsParam{"owner:dns-team", "owner:dns-team", "owner:dns-team"}),
-			TTL:      cloudflare.F(dns.TTL1),
+		Posts: cloudflare.F([]dns.RecordUnionParam{dns.ARecordParam{
+			Content: cloudflare.F("198.51.100.4"),
+			Type:    cloudflare.F(dns.ARecordTypeA),
+		}, dns.ARecordParam{
+			Content: cloudflare.F("198.51.100.4"),
+			Type:    cloudflare.F(dns.ARecordTypeA),
+		}, dns.ARecordParam{
+			Content: cloudflare.F("198.51.100.4"),
+			Type:    cloudflare.F(dns.ARecordTypeA),
 		}}),
 		Puts: cloudflare.F([]dns.RecordUnionParam{dns.ARecordParam{
 			Content: cloudflare.F("198.51.100.4"),
@@ -271,13 +251,9 @@ func TestRecordEditWithOptionalParams(t *testing.T) {
 		"023e105f4ecef8ad9ca31a8372d0c353",
 		dns.RecordEditParams{
 			ZoneID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"),
-			Record: dns.RecordParam{
-				Comment:  cloudflare.F("Domain verification record"),
-				Name:     cloudflare.F("example.com"),
-				Proxied:  cloudflare.F(true),
-				Settings: cloudflare.F[any](map[string]interface{}{}),
-				Tags:     cloudflare.F([]dns.RecordTagsParam{"owner:dns-team", "owner:dns-team", "owner:dns-team"}),
-				TTL:      cloudflare.F(dns.TTL1),
+			Record: dns.ARecordParam{
+				Content: cloudflare.F("198.51.100.4"),
+				Type:    cloudflare.F(dns.ARecordTypeA),
 			},
 		},
 	)
diff --git a/rulesets/rule_test.go b/rulesets/rule_test.go
index 734801228..b7109990c 100644
--- a/rulesets/rule_test.go
+++ b/rulesets/rule_test.go
@@ -32,10 +32,39 @@ func TestRuleNewWithOptionalParams(t *testing.T) {
 		context.TODO(),
 		"2f2feab2026849078ba485f918791bdc",
 		rulesets.RuleNewParams{
+			Body: rulesets.BlockRuleParam{
+				ID:     cloudflare.F("3a03d665bac047339bb530ecb439a90d"),
+				Action: cloudflare.F(rulesets.BlockRuleActionBlock),
+				ActionParameters: cloudflare.F(rulesets.BlockRuleActionParametersParam{
+					Response: cloudflare.F(rulesets.BlockRuleActionParametersResponseParam{
+						Content:     cloudflare.F("{\n  \"success\": false,\n  \"error\": \"you have been blocked\"\n}"),
+						ContentType: cloudflare.F("application/json"),
+						StatusCode:  cloudflare.F(int64(400)),
+					}),
+				}),
+				Description: cloudflare.F("Block when the IP address is not 1.1.1.1"),
+				Enabled:     cloudflare.F(true),
+				ExposedCredentialCheck: cloudflare.F(rulesets.BlockRuleExposedCredentialCheckParam{
+					PasswordExpression: cloudflare.F("url_decode(http.request.body.form[\\\"password\\\"][0])"),
+					UsernameExpression: cloudflare.F("url_decode(http.request.body.form[\\\"username\\\"][0])"),
+				}),
+				Expression: cloudflare.F("ip.src ne 1.1.1.1"),
+				Logging: cloudflare.F(rulesets.LoggingParam{
+					Enabled: cloudflare.F(true),
+				}),
+				Ratelimit: cloudflare.F(rulesets.BlockRuleRatelimitParam{
+					Characteristics:         cloudflare.F([]string{"ip.src"}),
+					Period:                  cloudflare.F(rulesets.BlockRuleRatelimitPeriod10),
+					CountingExpression:      cloudflare.F("http.request.body.raw eq \"abcd\""),
+					MitigationTimeout:       cloudflare.F(int64(600)),
+					RequestsPerPeriod:       cloudflare.F(int64(1000)),
+					RequestsToOrigin:        cloudflare.F(true),
+					ScorePerPeriod:          cloudflare.F(int64(400)),
+					ScoreResponseHeaderName: cloudflare.F("my-score"),
+				}),
+				Ref: cloudflare.F("my_ref"),
+			},
 			AccountID: cloudflare.F("account_id"),
-			Position: cloudflare.F[rulesets.RuleNewParamsPositionUnion](rulesets.RuleNewParamsPositionBeforePosition{
-				Before: cloudflare.F("da5e8e506c8e7877fe06cdf4c41add54"),
-			}),
 		},
 	)
 	if err != nil {
@@ -97,10 +126,39 @@ func TestRuleEditWithOptionalParams(t *testing.T) {
 		"2f2feab2026849078ba485f918791bdc",
 		"3a03d665bac047339bb530ecb439a90d",
 		rulesets.RuleEditParams{
+			Body: rulesets.BlockRuleParam{
+				ID:     cloudflare.F("3a03d665bac047339bb530ecb439a90d"),
+				Action: cloudflare.F(rulesets.BlockRuleActionBlock),
+				ActionParameters: cloudflare.F(rulesets.BlockRuleActionParametersParam{
+					Response: cloudflare.F(rulesets.BlockRuleActionParametersResponseParam{
+						Content:     cloudflare.F("{\n  \"success\": false,\n  \"error\": \"you have been blocked\"\n}"),
+						ContentType: cloudflare.F("application/json"),
+						StatusCode:  cloudflare.F(int64(400)),
+					}),
+				}),
+				Description: cloudflare.F("Block when the IP address is not 1.1.1.1"),
+				Enabled:     cloudflare.F(true),
+				ExposedCredentialCheck: cloudflare.F(rulesets.BlockRuleExposedCredentialCheckParam{
+					PasswordExpression: cloudflare.F("url_decode(http.request.body.form[\\\"password\\\"][0])"),
+					UsernameExpression: cloudflare.F("url_decode(http.request.body.form[\\\"username\\\"][0])"),
+				}),
+				Expression: cloudflare.F("ip.src ne 1.1.1.1"),
+				Logging: cloudflare.F(rulesets.LoggingParam{
+					Enabled: cloudflare.F(true),
+				}),
+				Ratelimit: cloudflare.F(rulesets.BlockRuleRatelimitParam{
+					Characteristics:         cloudflare.F([]string{"ip.src"}),
+					Period:                  cloudflare.F(rulesets.BlockRuleRatelimitPeriod10),
+					CountingExpression:      cloudflare.F("http.request.body.raw eq \"abcd\""),
+					MitigationTimeout:       cloudflare.F(int64(600)),
+					RequestsPerPeriod:       cloudflare.F(int64(1000)),
+					RequestsToOrigin:        cloudflare.F(true),
+					ScorePerPeriod:          cloudflare.F(int64(400)),
+					ScoreResponseHeaderName: cloudflare.F("my-score"),
+				}),
+				Ref: cloudflare.F("my_ref"),
+			},
 			AccountID: cloudflare.F("account_id"),
-			Position: cloudflare.F[rulesets.RuleEditParamsPositionUnion](rulesets.RuleEditParamsPositionBeforePosition{
-				Before: cloudflare.F("da5e8e506c8e7877fe06cdf4c41add54"),
-			}),
 		},
 	)
 	if err != nil {
diff --git a/zero_trust/dlpdatasetversion_test.go b/zero_trust/dlpdatasetversion_test.go
index b6520fa49..8c9037bba 100644
--- a/zero_trust/dlpdatasetversion_test.go
+++ b/zero_trust/dlpdatasetversion_test.go
@@ -34,11 +34,17 @@ func TestDLPDatasetVersionNew(t *testing.T) {
 		zero_trust.DLPDatasetVersionNewParams{
 			AccountID: cloudflare.F("account_id"),
 			Body: []zero_trust.DLPDatasetVersionNewParamsBodyUnion{zero_trust.DLPDatasetVersionNewParamsBodyExistingColumn{
-				EntryID: cloudflare.F("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"),
+				EntryID:    cloudflare.F("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"),
+				HeaderName: cloudflare.F("header_name"),
+				NumCells:   cloudflare.F(int64(0)),
 			}, zero_trust.DLPDatasetVersionNewParamsBodyExistingColumn{
-				EntryID: cloudflare.F("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"),
+				EntryID:    cloudflare.F("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"),
+				HeaderName: cloudflare.F("header_name"),
+				NumCells:   cloudflare.F(int64(0)),
 			}, zero_trust.DLPDatasetVersionNewParamsBodyExistingColumn{
-				EntryID: cloudflare.F("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"),
+				EntryID:    cloudflare.F("182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"),
+				HeaderName: cloudflare.F("header_name"),
+				NumCells:   cloudflare.F(int64(0)),
 			}},
 		},
 	)