DMARC Monitoring
Receive and analyze DMARC reports and identify potential sending issues with MailerSend's DMARC Monitoring API. Create and fetch monitors and retrieve your DMARC reports.
Receive and analyze DMARC reports to identify potential sending issues. Create and manage monitors for your domains, retrieve aggregated and IP-specific reports, and track DMARC compliance across your email infrastructure.
List monitors
If you want to retrieve information about multiple DMARC monitors, use this GET request:
GET https://api.mailersend.com/v1/dmarc-monitoringRequest parameters
| Query parameter | Type | Required | Limitations | Details |
|---|---|---|---|---|
page | int | no | Min: 1 | |
limit | int | no | Min: 1, Max: 100 | Default: 25 |
query | string | no | Max: 255 | Search/filter monitors |
sort_by | string | no | Allowed values: created_at, updated_at, dmarc_valid, spf_status | |
order | string | no | Allowed values: asc, desc |
Responses
Valid
Response Code: 200 OK
Response Headers:
content-type: application/json{
"data": [
{
"id": "9dnxr7qvdqg6pm0e",
"dmarc_record": "v=DMARC1; p=reject; rua=mailto:dmarc_agg@dmarc.example.org,mailto:rua-dev@tests.example.org,mailto:rua@example.org; ruf=mailto:dmarc_fr@dmarc.example.org; fo=1; pct=100; rf=afrf",
"wanted_dmarc_record": "v=DMARC1; p=reject; rua=mailto:dmarc_agg@dmarc.example.org,mailto:rua-dev@tests.example.org,mailto:rua@example.org; ruf=mailto:dmarc_fr@dmarc.example.org; fo=1; pct=100; rf=afrf",
"dmarc_valid": true,
"dmarc_record_checked_at": "2025-11-05T09:06:35.000000Z",
"spf_record": "v=spf1 include:_spf.example.org include:_spf.example.org include:example.org include:_spf.example.org ip4:192.0.2.1 include:example.org -all",
"spf_status": "valid",
"created_at": "2025-11-05T09:06:35.000000Z",
"updated_at": "2025-11-05T09:06:35.000000Z",
"domain": {
"id": "5genxmqlgozlyvk7",
"name": "example.org",
"created_at": "2025-11-05T06:18:44.000000Z",
"updated_at": "2025-11-05T06:19:14.000000Z"
}
}
]
}Error
Response Code: 422 Unprocessable EntitySee - Validation errors
Create a monitor
If you want to create a new DMARC monitor for a domain, use this POST request:
POST https://api.mailersend.com/v1/dmarc-monitoringRequest parameters
JSON parameters are provided in dot notation
| JSON Parameter | Type | Required | Limitations | Details |
|---|---|---|---|---|
domain_id | string | yes | Must be a verified domain. Only one monitor can be created per domain. |
Request body
{
"domain_id": "0z76k5jg0o3yeg2d"
}Responses
Valid
Response Code: 201 CREATED
Response Headers:
content-type: application/json{
"data": {
"id": "lx1p78jk1o53rzn4",
"dmarc_record": "",
"wanted_dmarc_record": "rua=mailto:rua@example.org",
"dmarc_valid": false,
"dmarc_record_checked_at": null,
"spf_record": null,
"spf_status": "not_found",
"created_at": "2025-11-06T10:27:34.000000Z",
"updated_at": "2025-11-06T10:27:34.000000Z",
"domain": {
"id": "0z76k5jg0o3yeg2d",
"name": "example.org",
"created_at": "2025-11-06T10:24:03.000000Z",
"updated_at": "2025-11-06T10:25:47.000000Z"
}
}
}Error
Response Code: 422 Unprocessable EntitySee - Validation errors
Update a monitor
If you want to update a DMARC monitor, use this PUT request:
PUT https://api.mailersend.com/v1/dmarc-monitoring/{monitor_id}Request parameters
| URL parameter | Type | Required | Limitations | Details |
|---|---|---|---|---|
monitor_id | string | yes |
JSON parameters are provided in dot notation
| JSON Parameter | Type | Required | Limitations | Details |
|---|---|---|---|---|
wanted_dmarc_record | string | yes | Max: 1000 | Must be a valid DMARC record format (e.g. v=DMARC1; p=none; rua=mailto:...). |
Request body
{
"wanted_dmarc_record": "v=DMARC1; p=reject; rua=mailto:dmarc_agg@dmarc.example.org"
}Responses
Valid
Response Code: 200 OK
Response Headers:
content-type: application/json{
"data": {
"id": "lx1p78jk1o53rzn4",
"dmarc_record": "",
"wanted_dmarc_record": "v=DMARC1; p=reject; rua=mailto:dmarc_agg@dmarc.example.org,mailto:rua-ms@example.org",
"dmarc_valid": false,
"dmarc_record_checked_at": "2025-11-06T10:31:55.000000Z",
"spf_record": null,
"spf_status": "not_found",
"created_at": "2025-11-06T10:27:34.000000Z",
"updated_at": "2025-11-06T10:31:55.000000Z",
"domain": {
"id": "0z76k5jg0o3yeg2d",
"name": "example.org",
"created_at": "2025-11-06T10:24:03.000000Z",
"updated_at": "2025-11-06T10:25:47.000000Z"
}
}
}Error
Response Code: 422 Unprocessable EntitySee - Validation errors
Delete a monitor
If you want to delete a DMARC monitor, use this DELETE request:
DELETE https://api.mailersend.com/v1/dmarc-monitoring/{monitor_id}Request parameters
| URL parameter | Type | Required | Limitations | Details |
|---|---|---|---|---|
monitor_id | string | yes |
Responses
Valid
Response Code: 204 No ContentError
Response Code: 404 Not FoundGet aggregated reports
If you want to retrieve aggregated DMARC reports for a monitor, use this GET request:
GET https://api.mailersend.com/v1/dmarc-monitoring/{monitor_id}/reportRequest parameters
| URL parameter | Type | Required | Limitations | Details |
|---|---|---|---|---|
monitor_id | string | yes |
| Query parameter | Type | Required | Limitations | Details |
|---|---|---|---|---|
page | int | no | ||
limit | int | no | Min: 1, Max: 100 | Default: 25 |
date_from | string | no | Filter by report date (from) | |
date_to | string | no | Filter by report date (to). Must be after date_from and not in the future | |
search | string | no | Max: 255 | |
category | string | no | ||
report_source | string | no | Max: 255 | Filter by reporting organization |
Responses
Valid
Response Code: 200 OK
Response Headers:
content-type: application/json{
"data": [
{
"ip_address": "192.0.2.1",
"total_volume": 2,
"passed_dmarc": "100%",
"passed_spf": "0%",
"passed_dkim": "100%",
"domain": "example.org",
"country": "United States",
"country_code": "US",
"city": null,
"is_favorite": true
},
{
"ip_address": "192.0.2.2",
"total_volume": 2,
"passed_dmarc": "100%",
"passed_spf": "100%",
"passed_dkim": "100%",
"domain": "example.org",
"country": "United States",
"country_code": "US",
"city": null
}
]
}Error
Response Code: 404 Not FoundGet IP-specific reports
If you want to retrieve detailed DMARC reports for a specific IP address, use this GET request:
GET https://api.mailersend.com/v1/dmarc-monitoring/{monitor_id}/report/{ip}Request parameters
| URL parameter | Type | Required | Limitations | Details |
|---|---|---|---|---|
monitor_id | string | yes | ||
ip | string | yes |
| Query parameter | Type | Required | Limitations | Details |
|---|---|---|---|---|
page | int | no | ||
limit | int | no | Min: 1, Max: 100 | Default: 25 |
date_from | string | no | Filter by report date (from) | |
date_to | string | no | Filter by report date (to). Must be after date_from and not in the future | |
search | string | no | Max: 255 | |
category | string | no | ||
report_source | string | no | Max: 255 | Filter by reporting organization |
Responses
Valid
Response Code: 200 OK
Response Headers:
content-type: application/json{
"data": [
{
"id": "690b12b39dc30891fc35d3da",
"ip_address": "192.0.2.1",
"ip_domain": "example.org",
"total_volume": 2,
"passed_dmarc": "100%",
"passed_spf": "0%",
"spf_domain": null,
"aligned_spf": false,
"passed_dkim": "100%",
"aligned_dkim": true,
"dkim_domain": null,
"created_at": "2025-11-05T00:00:00.000000Z",
"applied_policy": "none",
"override_reason": null,
"override_comment": null,
"domain": null,
"country": null,
"country_code": null,
"city": null,
"report_source": "example.com",
"spf_auth": [
{
"type": "spf",
"result": "pass",
"domain": "example.org",
"selector": null
}
],
"dkim_auth": [
{
"type": "dkim",
"result": "fail",
"domain": "example.org",
"selector": "example"
}
]
}
]
}Error
Response Code: 404 Not FoundGet report sources
If you want to retrieve a list of report sources for a monitor, use this GET request:
GET https://api.mailersend.com/v1/dmarc-monitoring/{monitor_id}/report-sourcesRequest parameters
| URL parameter | Type | Required | Limitations | Details |
|---|---|---|---|---|
monitor_id | string | yes |
| Query parameter | Type | Required | Limitations | Details |
|---|---|---|---|---|
date_from | string | yes | Filter start date | |
date_to | string | yes | Filter end date. Must be after date_from and not in the future | |
status | string | no | Filter by acceptance status. Allowed values: accepted, rejected, quarantined |
Responses
Valid
Response Code: 200 OK
Response Headers:
content-type: application/json{
"data": [
{
"report_source": "example.com",
"reports": 3
}
]
}Error
Response Code: 404 Not FoundMark IP as favorite
If you want to mark an IP address as a favorite for a monitor, use this PUT request:
PUT https://api.mailersend.com/v1/dmarc-monitoring/{monitor_id}/favorite/{ip}Request parameters
| URL parameter | Type | Required | Limitations | Details |
|---|---|---|---|---|
monitor_id | string | yes | ||
ip | string | yes |
Responses
Valid
Response Code: 200 OK
Response Headers:
content-type: application/json{}Error
Response Code: 404 Not FoundRemove IP from favorites
If you want to remove an IP address from favorites for a monitor, use this DELETE request:
DELETE https://api.mailersend.com/v1/dmarc-monitoring/{monitor_id}/favorite/{ip}Request parameters
| URL parameter | Type | Required | Limitations | Details |
|---|---|---|---|---|
monitor_id | string | yes | ||
ip | string | yes |
Responses
Valid
Response Code: 204 No ContentError
Response Code: 404 Not FoundWebhooks
View available webhook events and create, manage and update webhooks with the Webhooks API endpoint. Create triggered workflows and automations.
Blocklist Monitoring
Monitor your sending domains and IP addresses for blocklist hits with MailerSend's Blocklist Monitoring API. Create and manage monitors, receive notifications, and track blocklist status.