# DNS ## Email Routing - DNS settings `client.EmailRouting.DNS.Get(ctx, params) (*DNSGetResponse, error)` **get** `/zones/{zone_id}/email/routing/dns` Show the DNS records needed to configure your Email Routing zone. ### Parameters - `params DNSGetParams` - `ZoneID param.Field[string]` Path param: Identifier. - `Subdomain param.Field[string]` Query param: Domain of your zone. ### Returns - `type DNSGetResponse interface{…}` - `type DNSGetResponseEmailEmailRoutingDNSQueryResponse struct{…}` - `Errors []DNSGetResponseEmailEmailRoutingDNSQueryResponseError` - `Code int64` - `Message string` - `DocumentationURL string` - `Source DNSGetResponseEmailEmailRoutingDNSQueryResponseErrorsSource` - `Pointer string` - `Messages []DNSGetResponseEmailEmailRoutingDNSQueryResponseMessage` - `Code int64` - `Message string` - `DocumentationURL string` - `Source DNSGetResponseEmailEmailRoutingDNSQueryResponseMessagesSource` - `Pointer string` - `Success DNSGetResponseEmailEmailRoutingDNSQueryResponseSuccess` Whether the API call was successful. - `const DNSGetResponseEmailEmailRoutingDNSQueryResponseSuccessTrue DNSGetResponseEmailEmailRoutingDNSQueryResponseSuccess = true` - `Result DNSGetResponseEmailEmailRoutingDNSQueryResponseResult` - `Errors []DNSGetResponseEmailEmailRoutingDNSQueryResponseResultError` - `Code string` - `Missing DNSRecord` List of records needed to enable an Email Routing zone. - `Content string` DNS record content. - `Name string` DNS record name (or @ for the zone apex). - `Priority float64` Required for MX, SRV and URI records. Unused by other record types. Records with lower priorities are preferred. - `TTL DNSRecordTTL` Time to live, in seconds, of the DNS record. Must be between 60 and 86400, or 1 for 'automatic'. - `float64` - `type DNSRecordTTL float64` Time to live, in seconds, of the DNS record. Must be between 60 and 86400, or 1 for 'automatic'. - `const DNSRecordTTL1 DNSRecordTTL = 1` - `Type DNSRecordType` DNS record type. - `const DNSRecordTypeA DNSRecordType = "A"` - `const DNSRecordTypeAAAA DNSRecordType = "AAAA"` - `const DNSRecordTypeCNAME DNSRecordType = "CNAME"` - `const DNSRecordTypeHTTPS DNSRecordType = "HTTPS"` - `const DNSRecordTypeTXT DNSRecordType = "TXT"` - `const DNSRecordTypeSRV DNSRecordType = "SRV"` - `const DNSRecordTypeLOC DNSRecordType = "LOC"` - `const DNSRecordTypeMX DNSRecordType = "MX"` - `const DNSRecordTypeNS DNSRecordType = "NS"` - `const DNSRecordTypeCERT DNSRecordType = "CERT"` - `const DNSRecordTypeDNSKEY DNSRecordType = "DNSKEY"` - `const DNSRecordTypeDS DNSRecordType = "DS"` - `const DNSRecordTypeNAPTR DNSRecordType = "NAPTR"` - `const DNSRecordTypeSMIMEA DNSRecordType = "SMIMEA"` - `const DNSRecordTypeSSHFP DNSRecordType = "SSHFP"` - `const DNSRecordTypeSVCB DNSRecordType = "SVCB"` - `const DNSRecordTypeTLSA DNSRecordType = "TLSA"` - `const DNSRecordTypeURI DNSRecordType = "URI"` - `Record []DNSRecord` - `Content string` DNS record content. - `Name string` DNS record name (or @ for the zone apex). - `Priority float64` Required for MX, SRV and URI records. Unused by other record types. Records with lower priorities are preferred. - `TTL DNSRecordTTL` Time to live, in seconds, of the DNS record. Must be between 60 and 86400, or 1 for 'automatic'. - `Type DNSRecordType` DNS record type. - `ResultInfo DNSGetResponseEmailEmailRoutingDNSQueryResponseResultInfo` - `Count float64` Total number of results for the requested service. - `Page float64` Current page within paginated list of results. - `PerPage float64` Number of results per page of results. - `TotalCount float64` Total results available without any search parameters. - `TotalPages float64` The number of total pages in the entire result set. - `type DNSGetResponseEmailDNSSettingsResponseCollection struct{…}` - `Errors []DNSGetResponseEmailDNSSettingsResponseCollectionError` - `Code int64` - `Message string` - `DocumentationURL string` - `Source DNSGetResponseEmailDNSSettingsResponseCollectionErrorsSource` - `Pointer string` - `Messages []DNSGetResponseEmailDNSSettingsResponseCollectionMessage` - `Code int64` - `Message string` - `DocumentationURL string` - `Source DNSGetResponseEmailDNSSettingsResponseCollectionMessagesSource` - `Pointer string` - `Success DNSGetResponseEmailDNSSettingsResponseCollectionSuccess` Whether the API call was successful. - `const DNSGetResponseEmailDNSSettingsResponseCollectionSuccessTrue DNSGetResponseEmailDNSSettingsResponseCollectionSuccess = true` - `Result []DNSRecord` - `Content string` DNS record content. - `Name string` DNS record name (or @ for the zone apex). - `Priority float64` Required for MX, SRV and URI records. Unused by other record types. Records with lower priorities are preferred. - `TTL DNSRecordTTL` Time to live, in seconds, of the DNS record. Must be between 60 and 86400, or 1 for 'automatic'. - `Type DNSRecordType` DNS record type. - `ResultInfo DNSGetResponseEmailDNSSettingsResponseCollectionResultInfo` - `Count float64` Total number of results for the requested service. - `Page float64` Current page within paginated list of results. - `PerPage float64` Number of results per page of results. - `TotalCount float64` Total results available without any search parameters. - `TotalPages float64` The number of total pages in the entire result set. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/email_routing" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIKey("144c9defac04969c7bfad8efaa8ea194"), option.WithAPIEmail("user@example.com"), ) dns, err := client.EmailRouting.DNS.Get(context.TODO(), email_routing.DNSGetParams{ ZoneID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", dns) } ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": { "errors": [ { "code": "code", "missing": { "content": "route1.mx.cloudflare.net", "name": "example.com", "priority": 12, "ttl": 1, "type": "NS" } } ], "record": [ { "content": "route1.mx.cloudflare.net", "name": "example.com", "priority": 12, "ttl": 1, "type": "NS" } ] }, "result_info": { "count": 1, "page": 1, "per_page": 20, "total_count": 2000, "total_pages": 100 } } ``` ## Enable Email Routing `client.EmailRouting.DNS.New(ctx, params) (*Settings, error)` **post** `/zones/{zone_id}/email/routing/dns` Enable you Email Routing zone. Add and lock the necessary MX and SPF records. ### Parameters - `params DNSNewParams` - `ZoneID param.Field[string]` Path param: Identifier. - `Name param.Field[string]` Body param: Domain of your zone. ### Returns - `type Settings struct{…}` - `ID string` Email Routing settings identifier. - `Enabled SettingsEnabled` State of the zone settings for Email Routing. - `const SettingsEnabledTrue SettingsEnabled = true` - `const SettingsEnabledFalse SettingsEnabled = false` - `Name string` Domain of your zone. - `Created Time` The date and time the settings have been created. - `Modified Time` The date and time the settings have been modified. - `SkipWizard SettingsSkipWizard` Flag to check if the user skipped the configuration wizard. - `const SettingsSkipWizardTrue SettingsSkipWizard = true` - `const SettingsSkipWizardFalse SettingsSkipWizard = false` - `Status SettingsStatus` Show the state of your account, and the type or configuration error. - `const SettingsStatusReady SettingsStatus = "ready"` - `const SettingsStatusUnconfigured SettingsStatus = "unconfigured"` - `const SettingsStatusMisconfigured SettingsStatus = "misconfigured"` - `const SettingsStatusMisconfiguredLocked SettingsStatus = "misconfigured/locked"` - `const SettingsStatusUnlocked SettingsStatus = "unlocked"` - `Tag string` Email Routing settings tag. (Deprecated, replaced by Email Routing settings identifier) ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/email_routing" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIKey("144c9defac04969c7bfad8efaa8ea194"), option.WithAPIEmail("user@example.com"), ) settings, err := client.EmailRouting.DNS.New(context.TODO(), email_routing.DNSNewParams{ ZoneID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", settings.ID) } ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": { "id": "75610dab9e69410a82cf7e400a09ecec", "enabled": true, "name": "example.net", "created": "2014-01-02T02:20:00Z", "modified": "2014-01-02T02:20:00Z", "skip_wizard": true, "status": "ready", "tag": "75610dab9e69410a82cf7e400a09ecec" } } ``` ## Unlock Email Routing `client.EmailRouting.DNS.Edit(ctx, params) (*Settings, error)` **patch** `/zones/{zone_id}/email/routing/dns` Unlock MX Records previously locked by Email Routing. ### Parameters - `params DNSEditParams` - `ZoneID param.Field[string]` Path param: Identifier. - `Name param.Field[string]` Body param: Domain of your zone. ### Returns - `type Settings struct{…}` - `ID string` Email Routing settings identifier. - `Enabled SettingsEnabled` State of the zone settings for Email Routing. - `const SettingsEnabledTrue SettingsEnabled = true` - `const SettingsEnabledFalse SettingsEnabled = false` - `Name string` Domain of your zone. - `Created Time` The date and time the settings have been created. - `Modified Time` The date and time the settings have been modified. - `SkipWizard SettingsSkipWizard` Flag to check if the user skipped the configuration wizard. - `const SettingsSkipWizardTrue SettingsSkipWizard = true` - `const SettingsSkipWizardFalse SettingsSkipWizard = false` - `Status SettingsStatus` Show the state of your account, and the type or configuration error. - `const SettingsStatusReady SettingsStatus = "ready"` - `const SettingsStatusUnconfigured SettingsStatus = "unconfigured"` - `const SettingsStatusMisconfigured SettingsStatus = "misconfigured"` - `const SettingsStatusMisconfiguredLocked SettingsStatus = "misconfigured/locked"` - `const SettingsStatusUnlocked SettingsStatus = "unlocked"` - `Tag string` Email Routing settings tag. (Deprecated, replaced by Email Routing settings identifier) ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/email_routing" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIKey("144c9defac04969c7bfad8efaa8ea194"), option.WithAPIEmail("user@example.com"), ) settings, err := client.EmailRouting.DNS.Edit(context.TODO(), email_routing.DNSEditParams{ ZoneID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", settings.ID) } ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": { "id": "75610dab9e69410a82cf7e400a09ecec", "enabled": true, "name": "example.net", "created": "2014-01-02T02:20:00Z", "modified": "2014-01-02T02:20:00Z", "skip_wizard": true, "status": "ready", "tag": "75610dab9e69410a82cf7e400a09ecec" } } ``` ## Disable Email Routing `client.EmailRouting.DNS.Delete(ctx, body) (*SinglePage[DNSRecord], error)` **delete** `/zones/{zone_id}/email/routing/dns` Disable your Email Routing zone. Also removes additional MX records previously required for Email Routing to work. ### Parameters - `body DNSDeleteParams` - `ZoneID param.Field[string]` Identifier. ### Returns - `type DNSRecord struct{…}` List of records needed to enable an Email Routing zone. - `Content string` DNS record content. - `Name string` DNS record name (or @ for the zone apex). - `Priority float64` Required for MX, SRV and URI records. Unused by other record types. Records with lower priorities are preferred. - `TTL DNSRecordTTL` Time to live, in seconds, of the DNS record. Must be between 60 and 86400, or 1 for 'automatic'. - `float64` - `type DNSRecordTTL float64` Time to live, in seconds, of the DNS record. Must be between 60 and 86400, or 1 for 'automatic'. - `const DNSRecordTTL1 DNSRecordTTL = 1` - `Type DNSRecordType` DNS record type. - `const DNSRecordTypeA DNSRecordType = "A"` - `const DNSRecordTypeAAAA DNSRecordType = "AAAA"` - `const DNSRecordTypeCNAME DNSRecordType = "CNAME"` - `const DNSRecordTypeHTTPS DNSRecordType = "HTTPS"` - `const DNSRecordTypeTXT DNSRecordType = "TXT"` - `const DNSRecordTypeSRV DNSRecordType = "SRV"` - `const DNSRecordTypeLOC DNSRecordType = "LOC"` - `const DNSRecordTypeMX DNSRecordType = "MX"` - `const DNSRecordTypeNS DNSRecordType = "NS"` - `const DNSRecordTypeCERT DNSRecordType = "CERT"` - `const DNSRecordTypeDNSKEY DNSRecordType = "DNSKEY"` - `const DNSRecordTypeDS DNSRecordType = "DS"` - `const DNSRecordTypeNAPTR DNSRecordType = "NAPTR"` - `const DNSRecordTypeSMIMEA DNSRecordType = "SMIMEA"` - `const DNSRecordTypeSSHFP DNSRecordType = "SSHFP"` - `const DNSRecordTypeSVCB DNSRecordType = "SVCB"` - `const DNSRecordTypeTLSA DNSRecordType = "TLSA"` - `const DNSRecordTypeURI DNSRecordType = "URI"` ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/email_routing" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIKey("144c9defac04969c7bfad8efaa8ea194"), option.WithAPIEmail("user@example.com"), ) page, err := client.EmailRouting.DNS.Delete(context.TODO(), email_routing.DNSDeleteParams{ ZoneID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", page) } ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true } ``` ## Domain Types ### DNS Record - `type DNSRecord struct{…}` List of records needed to enable an Email Routing zone. - `Content string` DNS record content. - `Name string` DNS record name (or @ for the zone apex). - `Priority float64` Required for MX, SRV and URI records. Unused by other record types. Records with lower priorities are preferred. - `TTL DNSRecordTTL` Time to live, in seconds, of the DNS record. Must be between 60 and 86400, or 1 for 'automatic'. - `float64` - `type DNSRecordTTL float64` Time to live, in seconds, of the DNS record. Must be between 60 and 86400, or 1 for 'automatic'. - `const DNSRecordTTL1 DNSRecordTTL = 1` - `Type DNSRecordType` DNS record type. - `const DNSRecordTypeA DNSRecordType = "A"` - `const DNSRecordTypeAAAA DNSRecordType = "AAAA"` - `const DNSRecordTypeCNAME DNSRecordType = "CNAME"` - `const DNSRecordTypeHTTPS DNSRecordType = "HTTPS"` - `const DNSRecordTypeTXT DNSRecordType = "TXT"` - `const DNSRecordTypeSRV DNSRecordType = "SRV"` - `const DNSRecordTypeLOC DNSRecordType = "LOC"` - `const DNSRecordTypeMX DNSRecordType = "MX"` - `const DNSRecordTypeNS DNSRecordType = "NS"` - `const DNSRecordTypeCERT DNSRecordType = "CERT"` - `const DNSRecordTypeDNSKEY DNSRecordType = "DNSKEY"` - `const DNSRecordTypeDS DNSRecordType = "DS"` - `const DNSRecordTypeNAPTR DNSRecordType = "NAPTR"` - `const DNSRecordTypeSMIMEA DNSRecordType = "SMIMEA"` - `const DNSRecordTypeSSHFP DNSRecordType = "SSHFP"` - `const DNSRecordTypeSVCB DNSRecordType = "SVCB"` - `const DNSRecordTypeTLSA DNSRecordType = "TLSA"` - `const DNSRecordTypeURI DNSRecordType = "URI"`