Skip to content
Start here

Configure DMARC Reports

email_auth.dmarc_reports.edit(DMARCReportEditParams**kwargs) -> DMARCReportEditResponse
PATCH/zones/{zone_id}/email/auth/dmarc-reports

Updates the DMARC report configuration for a zone. At least one of enabled or skip_wizard must be provided. When enabling, the handler will ensure the DMARC RUA record exists in DNS.

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
zone_id: str

Identifier.

maxLength32
enabled: Optional[bool]

Enable or disable DMARC reports for this zone

skip_wizard: Optional[bool]

Skip the DMARC setup wizard

ReturnsExpand Collapse
class DMARCReportEditResponse:

Response for GET/PATCH /dmarc-reports

approved_sources: Optional[List[ApprovedSource]]

List of approved sending sources (omitted when empty)

Deprecatedcreated: Optional[datetime]

Deprecated, use created_at

formatdate-time
created_at: Optional[datetime]

Creation timestamp

formatdate-time
domain: Optional[str]

The source domain

ips: Optional[List[str]]

Resolved IP addresses from SPF

Deprecatedmodified: Optional[datetime]

Deprecated, use modified_at

formatdate-time
modified_at: Optional[datetime]

Last modification timestamp

formatdate-time
name: Optional[str]

Source name (typically same as domain)

slug: Optional[str]

URL-friendly identifier

tag: Optional[str]

Source UUID

Deprecatedcreated: Optional[datetime]

Deprecated, use created_at

formatdate-time
created_at: Optional[datetime]

Creation timestamp

formatdate-time
enabled: Optional[bool]

Whether DMARC reports are enabled

Deprecatedmodified: Optional[datetime]

Deprecated, use modified_at

formatdate-time
modified_at: Optional[datetime]

Last modification timestamp

formatdate-time
records: Optional[Records]

Live DNS records for the zone, grouped by type

bimi_records: Optional[List[RecordsBimiRecord]]

BIMI TXT records

id: Optional[str]

DNS record ID

content: Optional[str]

Record content

name: Optional[str]

DNS record name

ttl: Optional[int]

Time to live in seconds

type: Optional[str]

Record type

cname_dkim_records: Optional[List[RecordsCnamedkimRecord]]

CNAME records for DKIM

id: Optional[str]

DNS record ID

content: Optional[str]

Record content

name: Optional[str]

DNS record name

ttl: Optional[int]

Time to live in seconds

type: Optional[str]

Record type

cname_dmarc_records: Optional[List[RecordsCnamedmarcRecord]]

CNAME records at _dmarc (problematic)

id: Optional[str]

DNS record ID

content: Optional[str]

Record content

name: Optional[str]

DNS record name

ttl: Optional[int]

Time to live in seconds

type: Optional[str]

Record type

cname_spf_records: Optional[List[RecordsCnamespfRecord]]

CNAME records for SPF

id: Optional[str]

DNS record ID

content: Optional[str]

Record content

name: Optional[str]

DNS record name

ttl: Optional[int]

Time to live in seconds

type: Optional[str]

Record type

dkim_records: Optional[List[RecordsDKIMRecord]]

DKIM TXT records

id: Optional[str]

DNS record ID

content: Optional[str]

Record content

name: Optional[str]

DNS record name

ttl: Optional[int]

Time to live in seconds

type: Optional[str]

Record type

dmarc_records: Optional[List[RecordsDMARCRecord]]

DMARC TXT records

id: Optional[str]

DNS record ID

content: Optional[str]

Record content

name: Optional[str]

DNS record name

ttl: Optional[int]

Time to live in seconds

type: Optional[str]

Record type

spf_records: Optional[List[RecordsSPFRecord]]

SPF TXT records

id: Optional[str]

DNS record ID

content: Optional[str]

Record content

name: Optional[str]

DNS record name

ttl: Optional[int]

Time to live in seconds

type: Optional[str]

Record type

rua_prefix: Optional[str]

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

skip_wizard: Optional[bool]

Whether to skip the setup wizard

status: Optional[Literal["missing-dmarc-report", "multiple-dmarc-reports", "missing-dmarc-rua", "cname-on-dmarc-record"]]

DMARC configuration status

One of the following:
"missing-dmarc-report"
"multiple-dmarc-reports"
"missing-dmarc-rua"
"cname-on-dmarc-record"
Deprecatedtag: Optional[str]

Use zone_id instead

zone_id: Optional[str]

Zone identifier

Configure DMARC Reports

import os
from cloudflare import Cloudflare

client = Cloudflare(
    api_token=os.environ.get("CLOUDFLARE_API_TOKEN"),  # This is the default and can be omitted
)
response = client.email_auth.dmarc_reports.edit(
    zone_id="023e105f4ecef8ad9ca31a8372d0c353",
)
print(response.zone_id)
{
  "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"
        }
      ],
      "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"
        }
      ],
      "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"
  }
}