# Domain health (records + blocklists in one call)

> The single call behind the domain-health card in the dashboard, and the one to reach for first: it returns the record checks and the blocklist checks for the…

Source: https://warmerly.com/docs/accounts/domain-health-records-blocklists-in-one-call

```text
GET  /accounts/{id}/domain-health
POST /accounts/{id}/domain-health
```

The single call behind the domain-health card in the dashboard, and the one to reach for first: it returns the record checks **and** the blocklist checks for the sending domain and its sending IP together, with per-record advisories rather than a bare pass/fail. `GET` reads the latest stored results; it does not run a new check. Any of `dns`, `domainBlocklist` and `ipBlocklist` is `null` when there is no stored result for it yet.

```json
{
  "domain": "yourdomain.com",
  "providerManaged": false,
  "dns": {
    "spfStatus": "pass",
    "dkimStatus": "none",
    "dmarcStatus": "pass",
    "mxStatus": "pass",
    "findings": [{ "record": "dkim", "severity": "warn", "title": "No DKIM record found" }],
    "checkedAt": "2026-09-12T08:14:00.000Z"
  },
  "domainBlocklist": { "subject": "yourdomain.com", "status": "clean", "listings": [], "zonesQueried": ["dbl.spamhaus.org"], "zonesErrored": [], "checkedAt": "2026-09-12T08:14:00.000Z" },
  "ipBlocklist": { "subject": "203.0.113.10", "via": "smtp.yourprovider.com", "status": "clean", "listings": [], "zonesQueried": [], "zonesErrored": [], "checkedAt": "2026-09-12T08:14:00.000Z" },
  "ipSkippedReason": null
}
```

| Field | Description |
| --- | --- |
| `providerManaged` | `true` for gmail.com, outlook.com and the like: the records belong to the provider, so a DKIM reading of them is unreliable and nothing here is your responsibility to fix. |
| `dns.findings` | Advisories beyond presence, SPF's `all` qualifier and its 10-lookup budget, DKIM key length and test mode, DMARC policy/`pct`/`rua`. |
| `domainBlocklist` / `ipBlocklist` | Listings on public blocklists, with the zones actually queried and any that errored, so a partial answer is visible as partial. |
| `ipSkippedReason` | Why there is no IP section (a provider-shared host, an unresolvable SMTP host). A hole with no reason reads as something silently broken. |

`POST` re-runs the DNS check and returns the same payload. It is **rate-limited internally**: a blocklist re-check inside the minimum interval (6 hours) reuses the stored result rather than re-querying third-party blocklist zones, so holding down a refresh button cannot multiply Warmerly's query volume across them.

The two endpoints below remain, and are the narrower views of the same data.

## More from Accounts

- [Check settings before you connect](https://warmerly.com/docs/accounts/check-settings-before-you-connect): detect takes { "email": "you@yourdomain.com" } (3 to 320 characters) and returns { "detection": { … } }:…
- [DNS and domain checks](https://warmerly.com/docs/accounts/dns-and-domain-checks): GET returns the last 10 DNS checks for the account, newest first, plus latest as a convenience (the first…
- [Placement tests](https://warmerly.com/docs/accounts/placement-tests): GET lists this account's 10 most recent placement tests, newest first, with a summary:
