Skip to content
Start here

Get DMARC Report Status

client.EmailAuth.DMARCReports.Get(ctx, query) (*DMARCReportGetResponse, error)
GET/zones/{zone_id}/email/auth/dmarc-reports

Retrieves the current DMARC report configuration and status for a zone. Returns the RUA prefix, enabled status, approved sources, and DNS records.

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
ParametersExpand Collapse
query DMARCReportGetParams
ZoneID param.Field[string]

Identifier.

maxLength32
ReturnsExpand Collapse
type DMARCReportGetResponse struct{…}

Response for GET/PATCH /dmarc-reports

ApprovedSources []DMARCReportGetResponseApprovedSourceOptional

List of approved sending sources (omitted when empty)

DeprecatedCreated TimeOptional

Use created_at instead.

Deprecated, use created_at

formatdate-time
CreatedAt TimeOptional

Creation timestamp

formatdate-time
Domain stringOptional

The source domain

IPs []stringOptional

Resolved IP addresses from SPF

DeprecatedModified TimeOptional

Use modified_at instead.

Deprecated, use modified_at

formatdate-time
ModifiedAt TimeOptional

Last modification timestamp

formatdate-time
Name stringOptional

Source name (typically same as domain)

Slug stringOptional

URL-friendly identifier

Tag stringOptional

Source UUID

DeprecatedCreated TimeOptional

Use created_at instead.

Deprecated, use created_at

formatdate-time
CreatedAt TimeOptional

Creation timestamp

formatdate-time
Enabled boolOptional

Whether DMARC reports are enabled

DeprecatedModified TimeOptional

Use modified_at instead.

Deprecated, use modified_at

formatdate-time
ModifiedAt TimeOptional

Last modification timestamp

formatdate-time
Records DMARCReportGetResponseRecordsOptional

Live DNS records for the zone, grouped by type

BimiRecords []DMARCReportGetResponseRecordsBimiRecordOptional

BIMI TXT records

ID stringOptional

DNS record ID

Content stringOptional

Record content

Name stringOptional

DNS record name

TTL int64Optional

Time to live in seconds

Type stringOptional

Record type

CNAMEDKIMRecords []DMARCReportGetResponseRecordsCnamedkimRecordOptional

CNAME records for DKIM

ID stringOptional

DNS record ID

Content stringOptional

Record content

Name stringOptional

DNS record name

TTL int64Optional

Time to live in seconds

Type stringOptional

Record type

CNAMEDMARCRecords []DMARCReportGetResponseRecordsCnamedmarcRecordOptional

CNAME records at _dmarc. When such a CNAME resolves to a DMARC TXT record, the API returns that record in resolved_dmarc_records.

ID stringOptional

DNS record ID

Content stringOptional

Record content

Name stringOptional

DNS record name

TTL int64Optional

Time to live in seconds

Type stringOptional

Record type

CNAMESPFRecords []DMARCReportGetResponseRecordsCnamespfRecordOptional

CNAME records for SPF

ID stringOptional

DNS record ID

Content stringOptional

Record content

Name stringOptional

DNS record name

TTL int64Optional

Time to live in seconds

Type stringOptional

Record type

DKIMRecords []DMARCReportGetResponseRecordsDKIMRecordOptional

DKIM TXT records

ID stringOptional

DNS record ID

Content stringOptional

Record content

Name stringOptional

DNS record name

TTL int64Optional

Time to live in seconds

Type stringOptional

Record type

DMARCRecords []DMARCReportGetResponseRecordsDMARCRecordOptional

DMARC TXT records

ID stringOptional

DNS record ID

Content stringOptional

Record content

Name stringOptional

DNS record name

TTL int64Optional

Time to live in seconds

Type stringOptional

Record type

ResolvedDMARCRecords []DMARCReportGetResponseRecordsResolvedDMARCRecordOptional

DMARC records that a recursive lookup of _dmarc.{zone} returned. The API populates this only when the zone lacks a DMARC TXT record of its own, which usually means a CNAME delegates DMARC to another zone.

Content stringOptional

The TXT record value. The API joins all character-strings into a single string.

Name stringOptional

The name the API queried.

SPFRecords []DMARCReportGetResponseRecordsSPFRecordOptional

SPF TXT records

ID stringOptional

DNS record ID

Content stringOptional

Record content

Name stringOptional

DNS record name

TTL int64Optional

Time to live in seconds

Type stringOptional

Record type

RuaPrefix stringOptional

Prefix for DMARC RUA addresses (32-char hex string)

SkipWizard boolOptional

Whether to skip the setup wizard

Status DMARCReportGetResponseStatusOptional

DMARC configuration status. The API omits this field when DMARC is correctly configured. If the zone lacks a DMARC TXT record of its own, the API resolves _dmarc.{zone} recursively and evaluates whatever that lookup returns. A CNAME at _dmarc.{zone} that points to a valid DMARC record is therefore healthy; the cname-on-dmarc-record value means the CNAME resolves to no DMARC record at all.

One of the following:
const DMARCReportGetResponseStatusMissingDMARCReport DMARCReportGetResponseStatus = "missing-dmarc-report"
const DMARCReportGetResponseStatusMultipleDMARCReports DMARCReportGetResponseStatus = "multiple-dmarc-reports"
const DMARCReportGetResponseStatusMissingDMARCRua DMARCReportGetResponseStatus = "missing-dmarc-rua"
const DMARCReportGetResponseStatusCNAMEOnDMARCRecord DMARCReportGetResponseStatus = "cname-on-dmarc-record"
DeprecatedTag stringOptional

Use zone_id instead.

Use zone_id instead

ZoneID stringOptional

Zone identifier

Get DMARC Report Status

package main

import (
  "context"
  "fmt"

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

func main() {
  client := cloudflare.NewClient(
    option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"),
  )
  dmarcReport, err := client.EmailAuth.DMARCReports.Get(context.TODO(), email_auth.DMARCReportGetParams{
    ZoneID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"),
  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", dmarcReport.ZoneID)
}
{
  "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": {
    "approved_sources": [
      {
        "created": "2024-01-15T10:30:00.12345Z",
        "created_at": "2024-01-15T10:30:00.12345Z",
        "domain": "sendgrid.net",
        "ips": [
          "192.168.1.1",
          "10.0.0.1"
        ],
        "modified": "2024-01-15T11:45:00.12345Z",
        "modified_at": "2024-01-15T11:45:00.12345Z",
        "name": "SendGrid",
        "slug": "sendgrid-net",
        "tag": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415"
      }
    ],
    "created": "2024-01-15T10:30:00.12345Z",
    "created_at": "2024-01-15T10:30:00.12345Z",
    "enabled": true,
    "modified": "2024-01-15T11:45:00.12345Z",
    "modified_at": "2024-01-15T11:45:00.12345Z",
    "records": {
      "bimi_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "ttl": 300,
          "type": "TXT"
        }
      ],
      "cname_dkim_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "ttl": 300,
          "type": "TXT"
        }
      ],
      "cname_dmarc_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "ttl": 300,
          "type": "TXT"
        }
      ],
      "cname_spf_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "ttl": 300,
          "type": "TXT"
        }
      ],
      "dkim_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "ttl": 300,
          "type": "TXT"
        }
      ],
      "dmarc_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "ttl": 300,
          "type": "TXT"
        }
      ],
      "resolved_dmarc_records": [
        {
          "content": "v=DMARC1; p=reject; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com"
        }
      ],
      "spf_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "ttl": 300,
          "type": "TXT"
        }
      ]
    },
    "rua_prefix": "9233c80fc89f43e3a7b749605f651868",
    "skip_wizard": false,
    "status": "missing-dmarc-report",
    "tag": "023e105f4ecef8ad9ca31a8372d0c353",
    "zone_id": "023e105f4ecef8ad9ca31a8372d0c353"
  }
}
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": {
    "approved_sources": [
      {
        "created": "2024-01-15T10:30:00.12345Z",
        "created_at": "2024-01-15T10:30:00.12345Z",
        "domain": "sendgrid.net",
        "ips": [
          "192.168.1.1",
          "10.0.0.1"
        ],
        "modified": "2024-01-15T11:45:00.12345Z",
        "modified_at": "2024-01-15T11:45:00.12345Z",
        "name": "SendGrid",
        "slug": "sendgrid-net",
        "tag": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415"
      }
    ],
    "created": "2024-01-15T10:30:00.12345Z",
    "created_at": "2024-01-15T10:30:00.12345Z",
    "enabled": true,
    "modified": "2024-01-15T11:45:00.12345Z",
    "modified_at": "2024-01-15T11:45:00.12345Z",
    "records": {
      "bimi_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "ttl": 300,
          "type": "TXT"
        }
      ],
      "cname_dkim_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "ttl": 300,
          "type": "TXT"
        }
      ],
      "cname_dmarc_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "ttl": 300,
          "type": "TXT"
        }
      ],
      "cname_spf_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "ttl": 300,
          "type": "TXT"
        }
      ],
      "dkim_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "ttl": 300,
          "type": "TXT"
        }
      ],
      "dmarc_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "ttl": 300,
          "type": "TXT"
        }
      ],
      "resolved_dmarc_records": [
        {
          "content": "v=DMARC1; p=reject; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com"
        }
      ],
      "spf_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "ttl": 300,
          "type": "TXT"
        }
      ]
    },
    "rua_prefix": "9233c80fc89f43e3a7b749605f651868",
    "skip_wizard": false,
    "status": "missing-dmarc-report",
    "tag": "023e105f4ecef8ad9ca31a8372d0c353",
    "zone_id": "023e105f4ecef8ad9ca31a8372d0c353"
  }
}