SendlySendly
API ReferenceDeliverability

DMARC aggregate reports for your domains

GET
/api/v1/deliverability/dmarc

DMARC aggregate (RUA) reports receiving providers have sent about your verified domains, newest reporting window first.

The only signal on this surface that does not come from us. A report is a receiver saying what it saw arrive claiming to be your domain, from every source — which is how a sender finds out both that their own alignment is broken and that somebody else is sending as them.

pass_count counts DMARC ALIGNMENT from policy_evaluated, not raw authentication results: a message can pass SPF for a domain that is not the one in its From header, and that is precisely the case DMARC exists to catch.

Only reports about a domain registered in this project are stored, so a report about a domain you have not added will not appear here.

Requires the deliverability:read scope — Check why mail from one of your domains is not arriving.

Authorization

AuthorizationBearer <token>

API key authentication. Use a sk_* (FULL) or pk_* (SENDING_ONLY) key as the bearer token. Public keys (pk_*) are restricted to the email-send endpoints and the self-serve list subscribe/unsubscribe pair; every other endpoint — event tracking included — answers 403 for them. In scope terms (used by /api/v1/* operations): FULL keys hold every scope; SENDING_ONLY keys hold only emails:send.

In: header

Query Parameters

limit?integer
after?string

Opaque cursor from a previous response's next_cursor.

days?integer

How far back to read, by the report's window start. 1-180 days; defaults to 30.

domain?string

Restrict to reports about one of your domains.

Response Body

application/json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

curl -X GET "https://example.com/api/v1/deliverability/dmarc"
{
  "data": [
    {
      "id": "string",
      "report_id": "string",
      "org_name": "string",
      "policy_domain": "string",
      "range_begin": "2019-08-24T14:15:22Z",
      "range_end": "2019-08-24T14:15:22Z",
      "total_count": 0,
      "pass_count": 0,
      "fail_count": 0,
      "sources": [
        {
          "source_ip": "string",
          "count": 0,
          "disposition": "string",
          "dkim": "string",
          "spf": "string",
          "header_from": "string"
        }
      ],
      "received_at": "2019-08-24T14:15:22Z"
    }
  ],
  "has_more": true,
  "next_cursor": "string",
  "intake_configured": true
}
{
  "type": "http://example.com",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "code": "string",
  "request_id": "string",
  "errors": [
    {
      "pointer": "string",
      "code": "string",
      "message": "string"
    }
  ]
}
{
  "type": "http://example.com",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "code": "string",
  "request_id": "string",
  "errors": [
    {
      "pointer": "string",
      "code": "string",
      "message": "string"
    }
  ]
}
{
  "type": "http://example.com",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "code": "string",
  "request_id": "string",
  "errors": [
    {
      "pointer": "string",
      "code": "string",
      "message": "string"
    }
  ]
}
{
  "type": "http://example.com",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "code": "string",
  "request_id": "string",
  "errors": [
    {
      "pointer": "string",
      "code": "string",
      "message": "string"
    }
  ]
}
{
  "type": "http://example.com",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "code": "string",
  "request_id": "string",
  "errors": [
    {
      "pointer": "string",
      "code": "string",
      "message": "string"
    }
  ]
}