---
title: "Get a sender email's DNS vitals and warm-up status"
method: GET
path: "/sender-emails/{id}/dns"
tags: ["Sender Emails"]
---

# Get a sender email's DNS vitals and warm-up status

`GET /sender-emails/{id}/dns`

## Request

- Base URL: `https://api.emailchaser.com/r`
- URL: `https://api.emailchaser.com/r/sender-emails/{id}/dns`
- Auth: HTTP bearer

Checks the sender domain's SPF, DKIM, DMARC and MX records and reports each as OK, WARNING, MISSING or ERROR with human-readable issues, the same checks behind the app's DNS vitals view. DNS lookups run live at request time (a few seconds worst case), so the response always reflects current records - there is no cache to go stale. Also includes the mailbox's warm-up status: whether it is enrolled, today's ramp target (currentPerDay), the configured daily cap and its health score.

## Path parameters

- `id` integer, required

## Response `200`

DNS vitals and warm-up status

- ModelsSenderEmailDNSResponse
  - `checkedAt` string: CheckedAt is when the live DNS lookups ran (this request).
  - `dkim` ModelsDkimCheckResult
    - `checkedSelectors` string[]: CheckedSelectors is every selector name looked up, in the order tried.
    - `issues` string[]
    - `record` string
    - `selector` string: Selector is the DKIM selector the record was found under, null when no record was found.
    - `selectorSource` string: SelectorSource says where selector came from: SIGNATURE (read off the DKIM-Signature of this domain's warm-up mail), CUSTOMER (set in the app) or COMMON (a provider's default name). Null when none was found.
    - `status` string: Status is one of OK, WARNING, MISSING, ERROR. MISSING means no key was found under the selectors in checkedSelectors: a provider that picks its own selector name can have DKIM working while this says MISSING. ERROR means a DNS lookup timed out; try again.
  - `dmarc` ModelsDmarcCheckResult
    - `issues` string[]
    - `policy` string: Policy is the record's p= tag, null when no record was found.
    - `record` string
    - `status` string: Status is one of OK, WARNING, MISSING, ERROR.
  - `domain` string
  - `mx` ModelsMxCheckResult
    - `hosts` string[]: Hosts are the domain's mail servers as "preference host", lowest preference (highest priority) first.
    - `issues` string[]
    - `status` string: Status is one of OK, WARNING, MISSING, ERROR.
  - `senderEmailId` integer
  - `spf` ModelsSpfCheckResult
    - `issues` string[]
    - `record` string
    - `status` string: Status is one of OK, WARNING, MISSING, ERROR.
  - `warmup` ModelsSenderEmailWarmupStatus
    - `cap` integer: Cap is the configured maximum warm-up emails per day; the ramp stops there. 0 while the mailbox has never been enrolled.
    - `currentPerDay` integer: CurrentPerDay is today's warm-up ramp target (warm-up emails per day), 0 while not enrolled. On weekends of a weekdays-only account the ramp value still shows even though no warm-up emails send that day.
    - `enrolled` boolean: Enrolled is true while the mailbox has warm-up enabled.
    - `healthScore` integer: Health score 0-100, higher is better: the share of this account's warm-up emails over the last 7 full days that landed in the inbox rather than spam; 90+ is the app's bar for campaigns. It moves daily as warm-up emails land in the inbox (up) or in spam (down). Null while warm-up is off or before 20 warm-up emails were checked.

## Other responses

- `400`: Invalid sender email ID
- `401`: Unauthorized - invalid or missing API key
- `404`: Sender email not found
- `422`: Sender email has no valid domain
- `500`: Failed to check DNS records

---

[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)
