---
title: Get DMARC Report Status
---

[Skip to content](#%5Ftop) 

[API Reference](https://developers.cloudflare.com/api/go)

[Email Auth](https://developers.cloudflare.com/api/go/resources/email%5Fauth)

[DMARC Reports](https://developers.cloudflare.com/api/go/resources/email%5Fauth/subresources/dmarc%5Freports)

Copy Markdown

Open in **Claude**

Open in **ChatGPT**

Open in **Cursor**

---

**Copy Markdown**

**View as Markdown**

# Get DMARC Report Status

client.EmailAuth.DMARCReports.Get(ctx, query) (\*[DMARCReportGetResponse](https://developers.cloudflare.com/api/go/resources/email%5Fauth#%28resource%29%20email%5Fauth.dmarc%5Freports%20%3E%20%28model%29%20DMARCReportGetResponse%20%3E%20%28schema%29), 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](https://developers.cloudflare.com/fundamentals/api/get-started/create-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

Resolved \[\]stringOptional

For a CNAME record, the TXT content(s) found by following the CNAME chain to its target. An empty array means the chain was resolved but nothing usable was found there; omitted/null means resolution was not attempted for this record (always the case for non-CNAME entries). A CNAME chain that terminates in more than one TXT value at the target yields multiple entries. Populated on entries in cname\_dmarc\_records, cname\_spf\_records, and cname\_dkim\_records.

TTL int64Optional

Time to live in seconds

Type stringOptional

Record type

CNAMEDKIMRecords \[\]DMARCReportGetResponseRecordsCnamedkimRecordOptional

CNAME records for DKIM selectors. Each selector is resolved independently; when a selector’s CNAME resolves to a DKIM TXT record, the API returns that record’s content in the `resolved` field of the corresponding entry.

ID stringOptional

DNS record ID

Content stringOptional

Record content

Name stringOptional

DNS record name

Resolved \[\]stringOptional

For a CNAME record, the TXT content(s) found by following the CNAME chain to its target. An empty array means the chain was resolved but nothing usable was found there; omitted/null means resolution was not attempted for this record (always the case for non-CNAME entries). A CNAME chain that terminates in more than one TXT value at the target yields multiple entries. Populated on entries in cname\_dmarc\_records, cname\_spf\_records, and cname\_dkim\_records.

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’s content in the `resolved` field of the corresponding entry.

ID stringOptional

DNS record ID

Content stringOptional

Record content

Name stringOptional

DNS record name

Resolved \[\]stringOptional

For a CNAME record, the TXT content(s) found by following the CNAME chain to its target. An empty array means the chain was resolved but nothing usable was found there; omitted/null means resolution was not attempted for this record (always the case for non-CNAME entries). A CNAME chain that terminates in more than one TXT value at the target yields multiple entries. Populated on entries in cname\_dmarc\_records, cname\_spf\_records, and cname\_dkim\_records.

TTL int64Optional

Time to live in seconds

Type stringOptional

Record type

CNAMESPFRecords \[\]DMARCReportGetResponseRecordsCnamespfRecordOptional

CNAME records at the zone apex. When such a CNAME resolves to an SPF TXT record, the API returns that record’s content in the `resolved` field of the corresponding entry.

ID stringOptional

DNS record ID

Content stringOptional

Record content

Name stringOptional

DNS record name

Resolved \[\]stringOptional

For a CNAME record, the TXT content(s) found by following the CNAME chain to its target. An empty array means the chain was resolved but nothing usable was found there; omitted/null means resolution was not attempted for this record (always the case for non-CNAME entries). A CNAME chain that terminates in more than one TXT value at the target yields multiple entries. Populated on entries in cname\_dmarc\_records, cname\_spf\_records, and cname\_dkim\_records.

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

Resolved \[\]stringOptional

For a CNAME record, the TXT content(s) found by following the CNAME chain to its target. An empty array means the chain was resolved but nothing usable was found there; omitted/null means resolution was not attempted for this record (always the case for non-CNAME entries). A CNAME chain that terminates in more than one TXT value at the target yields multiple entries. Populated on entries in cname\_dmarc\_records, cname\_spf\_records, and cname\_dkim\_records.

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

Resolved \[\]stringOptional

For a CNAME record, the TXT content(s) found by following the CNAME chain to its target. An empty array means the chain was resolved but nothing usable was found there; omitted/null means resolution was not attempted for this record (always the case for non-CNAME entries). A CNAME chain that terminates in more than one TXT value at the target yields multiple entries. Populated on entries in cname\_dmarc\_records, cname\_spf\_records, and cname\_dkim\_records.

TTL int64Optional

Time to live in seconds

Type stringOptional

Record type

DeprecatedResolvedDMARCRecords \[\]DMARCReportGetResponseRecordsResolvedDMARCRecordOptional

Use the `resolved` field on the corresponding entry in cname\_dmarc\_records instead.

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

Resolved \[\]stringOptional

For a CNAME record, the TXT content(s) found by following the CNAME chain to its target. An empty array means the chain was resolved but nothing usable was found there; omitted/null means resolution was not attempted for this record (always the case for non-CNAME entries). A CNAME chain that terminates in more than one TXT value at the target yields multiple entries. Populated on entries in cname\_dmarc\_records, cname\_spf\_records, and cname\_dkim\_records.

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"

const DMARCReportGetResponseStatusUnauthorizedReportingDomain DMARCReportGetResponseStatus \= "unauthorized-reporting-domain"

DeprecatedTag stringOptional

Use `zone_id` instead.

Use `zone_id` instead

ZoneID stringOptional

Zone identifier

### Get DMARC Report Status

Go

HTTPHTTP

TypeScriptTypeScript

PythonPython

GoGo

TerraformTerraform

```
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)
}

```

200 example

```
{
  "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",
          "resolved": [
            "v=DMARC1; p=reject; rua=mailto:rua@dmarc-reports.cloudflare.net"
          ],
          "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",
          "resolved": [
            "v=DMARC1; p=reject; rua=mailto:rua@dmarc-reports.cloudflare.net"
          ],
          "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",
          "resolved": [
            "v=DMARC1; p=reject; rua=mailto:rua@dmarc-reports.cloudflare.net"
          ],
          "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",
          "resolved": [
            "v=DMARC1; p=reject; rua=mailto:rua@dmarc-reports.cloudflare.net"
          ],
          "ttl": 300,
          "type": "TXT"
        }
      ],
      "dkim_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "resolved": [
            "v=DMARC1; p=reject; rua=mailto:rua@dmarc-reports.cloudflare.net"
          ],
          "ttl": 300,
          "type": "TXT"
        }
      ],
      "dmarc_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "resolved": [
            "v=DMARC1; p=reject; rua=mailto:rua@dmarc-reports.cloudflare.net"
          ],
          "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",
          "resolved": [
            "v=DMARC1; p=reject; rua=mailto:rua@dmarc-reports.cloudflare.net"
          ],
          "ttl": 300,
          "type": "TXT"
        }
      ]
    },
    "rua_prefix": "9233c80fc89f43e3a7b749605f651868",
    "skip_wizard": false,
    "status": "missing-dmarc-report",
    "tag": "023e105f4ecef8ad9ca31a8372d0c353",
    "zone_id": "023e105f4ecef8ad9ca31a8372d0c353"
  }
}
```

##### Returns Examples

200 example

```
{
  "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",
          "resolved": [
            "v=DMARC1; p=reject; rua=mailto:rua@dmarc-reports.cloudflare.net"
          ],
          "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",
          "resolved": [
            "v=DMARC1; p=reject; rua=mailto:rua@dmarc-reports.cloudflare.net"
          ],
          "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",
          "resolved": [
            "v=DMARC1; p=reject; rua=mailto:rua@dmarc-reports.cloudflare.net"
          ],
          "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",
          "resolved": [
            "v=DMARC1; p=reject; rua=mailto:rua@dmarc-reports.cloudflare.net"
          ],
          "ttl": 300,
          "type": "TXT"
        }
      ],
      "dkim_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "resolved": [
            "v=DMARC1; p=reject; rua=mailto:rua@dmarc-reports.cloudflare.net"
          ],
          "ttl": 300,
          "type": "TXT"
        }
      ],
      "dmarc_records": [
        {
          "id": "e5bb46707a802688812d5d1c9f7977d4",
          "content": "v=DMARC1; p=none; rua=mailto:rua@dmarc-reports.cloudflare.net",
          "name": "_dmarc.example.com",
          "resolved": [
            "v=DMARC1; p=reject; rua=mailto:rua@dmarc-reports.cloudflare.net"
          ],
          "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",
          "resolved": [
            "v=DMARC1; p=reject; rua=mailto:rua@dmarc-reports.cloudflare.net"
          ],
          "ttl": 300,
          "type": "TXT"
        }
      ]
    },
    "rua_prefix": "9233c80fc89f43e3a7b749605f651868",
    "skip_wizard": false,
    "status": "missing-dmarc-report",
    "tag": "023e105f4ecef8ad9ca31a8372d0c353",
    "zone_id": "023e105f4ecef8ad9ca31a8372d0c353"
  }
}
```