---
title: "Check a domain's SPF, DKIM, DMARC, MX and blocklist status"
method: POST
path: "/api/domain-health"
tags: ["Site"]
---

# Check a domain's SPF, DKIM, DMARC, MX and blocklist status

`POST /api/domain-health`

## Request

- Base URL: `https://www.emailchaser.com`
- URL: `https://www.emailchaser.com/api/domain-health`
- Auth: none required

Powers /domain-health-check and the SPF, DKIM, DMARC, MX and blacklist checker pages. Reads live DNS on every call and stores nothing. Each check comes back as pass, warn, fail or error (could not check), with a plain-English line, what was found and, where one can be derived, the record to publish. A blocklist that refuses the query or does not answer is reported as not checked, never as clean. Send an IPv4 address instead of a domain to check it on the IP blocklists only.

## Request body

- object
  - `domain` string, required: A domain, an email address or an IPv4 address.
  - `selector` string: A DKIM selector to try first, optional.

## Response `200`

The report. `exists` is false when the domain is not in DNS.

- object
  - `ok` boolean
  - `kind` 'domain' | 'ip'
  - `subject` string
  - `exists` boolean
  - `checkedAt` string, date-time
  - `verdict` object
  - `checks` object: spf, dkim, dmarc, mx and blacklist, each { status, line, why, found, fix, detail }.

## Other responses

- `400`: The request body was missing or invalid.
- `405`: Wrong HTTP method. The Allow header lists the right one.
- `429`: Rate limited.
- `500`: The endpoint is misconfigured on this deployment.

---

[API](https://skmtc.dev/emailchaser/apis/emailchaser-api.md) · [All operations](https://skmtc.dev/emailchaser/apis/emailchaser-api/llms.txt) · [OpenAPI document](https://skmtc.dev/emailchaser/apis/emailchaser-api/revisions/8b114990abb7?raw)
