Supported Formats

JSON

GET https://api.dmarcreport.com/v2/accounts
List accounts

Supported Formats

JSON

Errors

Code Description
401 Unauthorized
403 Forbidden
404 Not Found
500 Server crashed for some reason

Examples

{
    "note": "When updating or deleting an account, you can use either the 'id' (numeric) or 'slug' in the URL parameter. For example: PUT /v2/accounts/1473 or PUT /v2/accounts/my-team",
    "owned_accounts": [
        {
            "id": 1462,
            "title": "Default",
            "slug": "default-16243a33-8c11-4989-85e1-0b4a09943a05",
            "created_at": "2023-02-22T08:59:26.246Z",
            "updated_at": "2023-02-22T08:59:26.246Z",
            "user_id": 1
        },
        {
            "id": 1473,
            "title": "QA testing update",
            "slug": "qa-testing",
            "created_at": "2023-02-23T13:10:03.072Z",
            "updated_at": "2023-04-07T06:44:16.693Z",
            "user_id": 1
        }

    ],
    "accounts": [
        {
            "id": 1487,
            "title": "testingNew",
            "slug": "testingnew",
            "created_at": "2023-03-01T11:09:29.357Z",
            "updated_at": "2023-03-01T11:09:29.357Z",
            "user_id": 1
        },
        {
            "id": 1488,
            "title": "testing",
            "slug": "testing-ff8ed30a-1b65-4a89-bd22-19d358a1a9bc",
            "created_at": "2023-03-01T11:09:29.455Z",
            "updated_at": "2023-03-01T11:09:29.455Z",
            "user_id": 1
        }
    ]
}

GET https://api.dmarcreport.com/v2/accounts/:id
Get account details

The :id parameter can be either the numeric ID or the slug of the account

Supported Formats

JSON

Errors

Code Description
401 Unauthorized
403 Forbidden
404 Not Found
500 Server crashed for some reason

Examples

{
  "id": 1473,
  "title": "QA testing update",
  "slug": "qa-testing",
  "created_at": "2023-02-23T13:10:03.072Z",
  "updated_at": "2026-04-07T06:44:16.693Z",
  "user_id": 1,
  "domains_count": 8
}

Params

Param name Description
id
required

Account ID (numeric, e.g., “1473”) or slug (e.g., “my-team”)

Validations:

  • Must be a String


POST https://api.dmarcreport.com/v2/accounts.json
Add account

Supported Formats

JSON

Errors

Code Description
401 Unauthorized
403 Forbidden
404 Not Found
500 Server crashed for some reason

Params

Param name Description
account
required

Validations:

  • Must be a Hash

account[title]
required

title of account

Validations:

  • Must be a String


PUT https://api.dmarcreport.com/v2/accounts/:id.json
Updates account

The :id parameter can be either the numeric ID or the slug of the account

Supported Formats

JSON

Errors

Code Description
401 Unauthorized
403 Forbidden
404 Not Found
500 Server crashed for some reason

Params

Param name Description
id
required

Account ID (numeric, e.g., “1473”) or slug (e.g., “my-team”)

Validations:

  • Must be a String

account
required

Validations:

  • Must be a Hash

account[title]
required

Title of team

Validations:

  • Must be a String


DELETE https://api.dmarcreport.com/v2/accounts/:id.json
Delete account

The :id parameter can be either the numeric ID or the slug of the account

Supported Formats

JSON

Errors

Code Description
401 Unauthorized
403 Forbidden
404 Not Found
500 Server crashed for some reason

Params

Param name Description
id
required

Account ID (numeric, e.g., “1473”) or slug (e.g., “my-team”)

Validations:

  • Must be a String


GET https://api.dmarcreport.com/v2/accounts/:id/compliance_summary
Get DMARC compliance summary for all domains in account

Returns an overall DMARC compliance scorecard for all domains in an account. Uses a single optimized database query to fetch stats for all domains at once.

Response includes: - total_domains: Number of domains in the account - active_domains: Domains with email volume in the period - total_email_volume: Total emails across all domains - overall_compliance_rate: Weighted average compliance rate - policy_distribution: Count of domains by DMARC policy (none/quarantine/reject) - grade_distribution: Count of domains by security grade (A-F) - domains_needing_attention: Domains with grade D or F - domains_ready_to_advance: Domains ready for stronger policy - domains: Per-domain breakdown with policy, compliance, volume, grade, and readiness

Each domain includes readiness indicators: - ready_to_advance: Boolean - true if domain can move to stronger policy - advance_to: Target policy (quarantine or reject) if ready - readiness_note: Human-readable status message - at_max_protection: True when at p=reject with 98%+ compliance

Grades reflect current protection level: - A: p=reject with 98%+ compliance (full protection) - B: p=reject 90%+ OR p=quarantine 90%+ compliance - C: p=reject 80%+ OR p=quarantine 80%+ OR p=none 90%+ - D: p=reject 70%+ OR p=quarantine 70%+ OR p=none 70%+ - F: Below 70% or no DMARC policy

Supported Formats

JSON

Errors

Code Description
401 Unauthorized
403 Forbidden
404 Not Found
500 Server crashed for some reason

Examples

{
  "account_id": 1473,
  "account_name": "My Company",
  "period": {
    "start_date": "2026-05-01",
    "end_date": "2026-05-31",
    "days": 30
  },
  "total_domains": 5,
  "active_domains": 4,
  "total_email_volume": 12500,
  "overall_compliance_rate": 94.2,
  "policy_distribution": {
    "none": 1,
    "quarantine": 2,
    "reject": 1,
    "not_set": 1
  },
  "grade_distribution": {
    "A": 1,
    "B": 2,
    "C": 1,
    "D": 0,
    "F": 1
  },
  "domains_needing_attention": [
    {
      "id": 105,
      "address": "legacy.example.com",
      "policy": "not_set",
      "compliance_rate": 0,
      "volume": 0,
      "grade": "F",
      "ready_to_advance": false,
      "readiness_note": "Configure DMARC policy to begin protection"
    }
  ],
  "domains_ready_to_advance": [
    {
      "id": 101,
      "address": "example.com",
      "policy": "none",
      "compliance_rate": 96.5,
      "volume": 8500,
      "grade": "C",
      "ready_to_advance": true,
      "advance_to": "quarantine",
      "readiness_note": "96.5% compliance achieved - ready to enable quarantine policy"
    },
    {
      "id": 102,
      "address": "mail.example.com",
      "policy": "quarantine",
      "compliance_rate": 99.1,
      "volume": 2500,
      "grade": "B",
      "ready_to_advance": true,
      "advance_to": "reject",
      "readiness_note": "99.1% compliance achieved - ready for full reject policy"
    }
  ],
  "domains": [
    {
      "id": 101,
      "address": "example.com",
      "policy": "none",
      "compliance_rate": 96.5,
      "volume": 8500,
      "grade": "C",
      "ready_to_advance": true,
      "advance_to": "quarantine",
      "readiness_note": "96.5% compliance achieved - ready to enable quarantine policy"
    },
    {
      "id": 102,
      "address": "mail.example.com",
      "policy": "quarantine",
      "compliance_rate": 99.1,
      "volume": 2500,
      "grade": "B",
      "ready_to_advance": true,
      "advance_to": "reject",
      "readiness_note": "99.1% compliance achieved - ready for full reject policy"
    },
    {
      "id": 103,
      "address": "marketing.example.com",
      "policy": "quarantine",
      "compliance_rate": 92.3,
      "volume": 1200,
      "grade": "B",
      "ready_to_advance": false,
      "readiness_note": "92.3% compliance - needs 98% for reject"
    },
    {
      "id": 104,
      "address": "support.example.com",
      "policy": "reject",
      "compliance_rate": 99.5,
      "volume": 300,
      "grade": "A",
      "ready_to_advance": false,
      "at_max_protection": true,
      "readiness_note": "Full protection achieved - maintain current policy"
    },
    {
      "id": 105,
      "address": "legacy.example.com",
      "policy": "not_set",
      "compliance_rate": 0,
      "volume": 0,
      "grade": "F",
      "ready_to_advance": false,
      "readiness_note": "Configure DMARC policy to begin protection"
    }
  ]
}

Params

Param name Description
id
required

Account ID (numeric or slug)

Validations:

  • Must be a String

days
optional

Number of days to analyze (default: 30, max: 90)

Validations:

  • Must be a number.