# List DMARC reports

`GET https://api.mailmasker.org/api/v1/dmarc/reports`

The reports received, newest first, with who sent each and the period it covers.

- Who can use it: Site admins
- Area: DMARC reports
- Answers 200 OK when it works
- Page: https://developer.mailmasker.org/dmarc-reports

One row per report. `org_name` is the receiver that sent it, `date_begin` to `date_end` the period it covers, and the `policy_` fields the policy it found published. `messages` is how many messages it covers, and `records` how many lines it has.

## Parameters

| Name | In | Required | What it is | Example |
|---|---|---|---|---|
| `days` | query | no | How many days back to look. 30 if you leave it out. |  |
| `domain` | query | no | Only reports about this domain. |  |
| `limit` | query | no | At most this many reports. 100 if you leave it out, 1000 at most. |  |

## Examples

cURL:

```bash
curl -s 'https://api.mailmasker.org/api/v1/dmarc/reports' \
  -H "Authorization: Bearer $TOKEN"
```

Perl:

```perl
use Mojo::Base -strict;
use Mojo::UserAgent;

my $ua  = Mojo::UserAgent->new;
my $res = $ua->get('https://api.mailmasker.org/api/v1/dmarc/reports',
    { Authorization => "Bearer $ENV{TOKEN}" })->result;
die $res->code, ' ', ($res->json('/error') // $res->message), "\n" unless $res->is_success;
print $res->body, "\n";
```

homelab-cli:

There is no homelab-cli command for this yet.

## Response

200 OK:

```json
{
  "days": 30,
  "reports": [
    {
      "id": 412,
      "org_name": "example.net",
      "report_id": "18342296310421557",
      "policy_domain": "example.com",
      "policy_p": "quarantine",
      "policy_pct": 100,
      "policy_adkim": "r",
      "policy_aspf": "r",
      "date_begin": "2026-11-02 18:00:00-06",
      "date_end": "2026-11-03 17:59:59-06",
      "ingested_at": "2026-11-03 21:00:03.998120-06",
      "messages": 214,
      "records": 2
    }
  ]
}
```
