Skip to content
Start here

Create DNS Record

client.DNS.Records.New(ctx, params) (*RecordResponse, error)
POST/zones/{zone_id}/dns_records

Create a new DNS record for a zone.

Notes:

  • A/AAAA records cannot exist on the same name as CNAME records.
  • NS records cannot exist on the same name as any other record type.
  • Domain names are always represented in Punycode, even if Unicode characters were used when creating the record.
Security
API Token

The preferred authorization scheme for interacting with the Cloudflare API. Create a token.

Example:Authorization: Bearer Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY
API Email + API Key

The previous authorization scheme for interacting with the Cloudflare API, used in conjunction with a Global API key.

Example:X-Auth-Email: user@example.com

The previous authorization scheme for interacting with the Cloudflare API. When possible, use API tokens instead of Global API keys.

Example:X-Auth-Key: 144c9defac04969c7bfad8efaa8ea194
Accepted Permissions (at least one required)
DNS Write
ParametersExpand Collapse
params RecordNewParams
ZoneID param.Field[string]

Path param: Identifier.

maxLength32
ARecord param.Field[ARecord]

Body param

ReturnsExpand Collapse
type RecordResponse interface{…}
One of the following:
type RecordResponseA struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseAAAA struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseCNAME struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseMX struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseNS struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseOpenpgpkey struct{…}
ID string

Identifier.

maxLength32
Comment string

Comments or notes about the DNS record. This field has no effect on DNS responses.

Content string

A single Base64-encoded OpenPGP Transferable Public Key (RFC 4880 Section 11.1)

CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Name string

Complete DNS record name, including the zone name, in Punycode.

maxLength255
minLength1
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

Proxied bool

Whether the record is receiving the performance and security benefits of Cloudflare.

Settings RecordResponseOpenpgpkeySettings

Settings for the DNS record.

IPV4Only booloptional

When enabled, only A records will be generated, and AAAA records will not be created. This setting is intended for exceptional cases. Note that this option only applies to proxied records and it has no effect on whether Cloudflare communicates with the origin using IPv4 or IPv6.

IPV6Only booloptional

When enabled, only AAAA records will be generated, and A records will not be created. This setting is intended for exceptional cases. Note that this option only applies to proxied records and it has no effect on whether Cloudflare communicates with the origin using IPv4 or IPv6.

Tags []RecordTags

Custom tags for the DNS record. This field has no effect on DNS responses.

TTL TTL

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.

One of the following:
float64
type TTL float64

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.

Type RecordResponseOpenpgpkeyType

Record type.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponsePTR struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseTXT struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseCAA struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseCERT struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseDNSKEY struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseDS struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseHTTPS struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseLOC struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseNAPTR struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseSMIMEA struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseSRV struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseSSHFP struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseSVCB struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseTLSA struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time
type RecordResponseURI struct{…}
ID string

Identifier.

maxLength32
CreatedOn Time

When the record was created.

formatdate-time
Meta unknown

Extra Cloudflare-specific information about the record.

ModifiedOn Time

When the record was last modified.

formatdate-time
Proxiable bool

Whether the record can be proxied by Cloudflare or not.

CommentModifiedOn Timeoptional

When the record comment was last modified. Omitted if there is no comment.

formatdate-time
TagsModifiedOn Timeoptional

When the record tags were last modified. Omitted if there are no tags.

formatdate-time

Create DNS Record

package main

import (
  "context"
  "fmt"

  "github.com/cloudflare/cloudflare-go"
  "github.com/cloudflare/cloudflare-go/dns"
  "github.com/cloudflare/cloudflare-go/option"
)

func main() {
  client := cloudflare.NewClient(
    option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"),
  )
  recordResponse, err := client.DNS.Records.New(context.TODO(), dns.RecordNewParams{
    ZoneID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"),
    Body: dns.ARecordParam{
      Name: cloudflare.F("example.com"),
      TTL: cloudflare.F(dns.TTL1),
      Type: cloudflare.F(dns.ARecordTypeA),
    },
  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", recordResponse)
}
{
  "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": {
    "name": "example.com",
    "ttl": 3600,
    "type": "A",
    "comment": "Domain verification record",
    "content": "198.51.100.4",
    "private_routing": true,
    "proxied": true,
    "settings": {
      "ipv4_only": true,
      "ipv6_only": true
    },
    "tags": [
      "owner:dns-team"
    ],
    "id": "023e105f4ecef8ad9ca31a8372d0c353",
    "created_on": "2014-01-01T05:20:00.12345Z",
    "meta": {},
    "modified_on": "2014-01-01T05:20:00.12345Z",
    "proxiable": true,
    "comment_modified_on": "2024-01-01T05:20:00.12345Z",
    "tags_modified_on": "2025-01-01T05:20:00.12345Z"
  }
}
Returns Examples
{
  "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": {
    "name": "example.com",
    "ttl": 3600,
    "type": "A",
    "comment": "Domain verification record",
    "content": "198.51.100.4",
    "private_routing": true,
    "proxied": true,
    "settings": {
      "ipv4_only": true,
      "ipv6_only": true
    },
    "tags": [
      "owner:dns-team"
    ],
    "id": "023e105f4ecef8ad9ca31a8372d0c353",
    "created_on": "2014-01-01T05:20:00.12345Z",
    "meta": {},
    "modified_on": "2014-01-01T05:20:00.12345Z",
    "proxiable": true,
    "comment_modified_on": "2024-01-01T05:20:00.12345Z",
    "tags_modified_on": "2025-01-01T05:20:00.12345Z"
  }
}